Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi c-strings aufsplitten (https://www.delphipraxis.net/185918-c-strings-aufsplitten.html)

Mattze 17. Jul 2015 13:35

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

Union 17. Jul 2015 14:47

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;

Mavarik 17. Jul 2015 15:55

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:
SL := TStringList.Create;
SL.Text := StringReplace(string1+#0+string2+#0+string3+#0,#0,#13#10,[rfreplaceall]);
LOL

mensch72 17. Jul 2015 17:38

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;

p80286 17. Jul 2015 17:52

AW: c-strings aufsplitten
 
Zitat:

Zitat von Mavarik (Beitrag 1309063)
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:
SL := TStringList.Create;
SL.Text := StringReplace(string1+#0+string2+#0+string3+#0,#0,#13#10,[rfreplaceall]);
LOL

Da schreibt man und schreibt man und es ist schon alles gesagt!

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz