![]() |
c-strings aufsplitten
Hallo,
ich hab's. Mehrfach. Aber ich finde es einfach nicht. Ein c-string aus mehreren c-strings. (Also der Form string1+#0+string2+#0+string3+#0#0. Wobei string1 bis string3 einfache Delphi-Strings sind.) Wie splittet man sowas in Delphistrings auf? Am besten in einer Stringlist mit string1, string2, string3 als items? Gruß Mattze |
AW: c-strings aufsplitten
Vielleicht so:
Delphi-Quellcode:
var
PA : PAnsiChar; SL : TStringList; AC : PAnsiChar; SL := TStringList.Create; try AC := Pointer(PA); while AC^ <> #0 do begin S := ''; while AC^<> #0 do begin S := S + AC^; Inc(AC); end; SL.Add(S); Inc(AC); end; for S in SL do writeln(S); Readln; finally SL.Free; end; |
AW: c-strings aufsplitten
string1+#0+string2+#0+string3+#0
Wenn 1 und 2 und 3 schon Delphi Strings sind? was gibt es da noch zu splitten? Ansonsten...
Delphi-Quellcode:
LOL
SL := TStringList.Create;
SL.Text := StringReplace(string1+#0+string2+#0+string3+#0,#0,#13#10,[rfreplaceall]); |
AW: c-strings aufsplitten
oder anders herum "C"->"SL" (der Trick ist das Delphi für C-Strings diese zuweisen und deren Länge bestimmen kann... dann eine Inc mit Länge+1 zum Wechsel&Test des folgenden Strings)
Delphi-Quellcode:
var
PA : PAnsiChar; SL : TStringList; S : String; len : Integer; PA = .... // !!!entweder ganz leer als mindestens ein #0 am Beginn oder es MUSS am Ende ein #0#0 sein!!! SL := TStringList.Create; S := AnsiString(PA); len := Length(S); while len>0 do begin SL.Add(AnsiString(PA)); Inc(PA,len+1); // wenn das Inc(<PChar>,x) nicht will... habe grade kein Delphi... CARDINAL(PA):=CARDINAL(PA)+len+1 oder irgend ein anderer funktionierender Cast tut es auch S := AnsiString(PA); len := Length(S); end; for S in SL do writeln(S); Readln; SL.Free; |
AW: c-strings aufsplitten
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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