![]() |
Re: String zerlegen
Zitat:
![]() Aber erstelle zukünftig pro Frage einen neuen Thread! :warn: |
Re: String zerlegen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin CheckBox1.AllowGrayed := true; CheckBox1.State := cbGrayed; end; |
Re: String zerlegen
hallo alexander,
hab mal kurz die routine ausprobiert, sobald man ein paar anführungszeichen einsetzt, trennt er dennoch... obgleich er da nichts mehr machen dürfte... IMHO ist die routine auch noch nicht ganz fertig ... ;-) noch viel spass beim weiterentwickeln... :-)
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, Classes, Windows ; {----------------------------------------------------------------------------- Description: Zerteilt einen String; Zerteilung erfolgt anhand von Teilstrings, die nicht mit ausgegeben werden Author: Alexander Roth Procedure: DivideList Arguments: s:string; const Separator, DivideList:TStrings -----------------------------------------------------------------------------} procedure DivideList(s:string; const Separator, DivideList:TStrings); function FindNext:TPoint; // sucht den als ersten vorkommenden Seperator var i:integer; tempstelle:integer; schongefunden:boolean; // führe ich ein, damit er auf jeden Fall // die 1. Fundstelle aufschreibt begin schongefunden:=false; result.y:=0; result.x:=0; for i:=0 to Separator.Count-1 do begin tempstelle:=pos(Separator.Strings[i], s); //schreibt die als nächstes kommende Trennzeichenstelle auf if (tempstelle > 0) and ((tempstelle < result.y) or not schongefunden) then // es darf niemals sein dass er eine stelle // aufschreibt die nicht da ist begin schongefunden:=true; result.y:=tempstelle; result.x:=i; end; end; end; var tempS:string; find:TPoint; // y = Fundstelle, x = Index des Separators; // hier habe ich keinen eigenen Typ gewählt, // der übersichtlicher wäre, um die Implementierung des // Codes einfacher zu gestalten begin if assigned(Separator) and assigned(DivideList) then begin if (s <> '') and (Separator.Count > 0) then // falls man irgendwelche // schrottige Angaben gemacht hat // wird man hier rausgeworfen begin find:=FindNext; while (find.y > 0) and (length(s) > 0) do begin tempS:=copy(s, 1, find.Y-1); if length(tempS) > 0 then DivideList.Append(tempS); delete(s, 1, find.y-1 + length(Separator[find.x])); find:=FindNext; end; if length(s) > 0 then DivideList.Append(s); end; end; end; procedure DemoDivideString; const s = ',;,''hallo|;guda,ggt;ds|gh,d;'',;";;,f;,g",'; //Ein paar Satzzeichen var StrList, NewList:TStringlist; //und schon trennt die Routine i:integer; //unsauber begin StrList:=TStringlist.Create; NewList:=TStringlist.Create; try StrList.Append(','); StrList.Append(';'); StrList.Append('|'); DivideList(s, StrList, NewList); for i :=0 to NewList.Count-1 do writeln(I:3, ' ', NewList.Strings[i]); finally NewList.free; StrList.free; end; end; begin DemoDivideString; readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz