![]() |
AW: Problem mit procedure Split()
Zitat:
Zitat:
Zitat:
Aber es ist im Endeffekt alles Geschmacksache und der beste Code ist der, der den Job erledigt und vom Kunden bezahlt wird ;-) |
AW: Problem mit procedure Split()
Nur leider ist die TStringList, bzw. alle Strings-Nachfahren, beim Input, nur auf einen einzelnen String ausgelegt und keine C-Stringliste.
Delphi-Quellcode:
procedure CStringArrayToStringList(const StringArray: String; SL: TStrings);
var P: PChar; begin SL.BeginUpdate; try SL.Clear; P := PChar(StringArray); if (P^ <> #0) or ((P + 1)^ <> #0) then repeat SL.Add(P); Inc(P, StrLen(P) + 1); until P = #0; finally SL.EndUpdate; end; end; [unnützes Wissen] die ResourceStrings werden auch so verwaltet ... jeweils 16 in einem solchen StringArray |
AW: Problem mit procedure Split()
Hast du mal versucht, deiner Liste die Eigenschaft "StrictDelimiter" auf true zu setzen, bevor zu splittest:
Delphi-Quellcode:
procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
begin Strings.Clear; Strings.Delimiter := Delimiter; Strings.StrictDelimiter:= True; // <--- hier Strings.DelimitedText := Input; end; Zitat:
|
AW: Problem mit procedure Split()
In Delphi 5 gab es noch keinen StrictDelimiter.
|
AW: Problem mit procedure Split()
Zitat:
komisch, bekomme ERROR: Unknown type: 'PChar' Also wie ich sehe geht es nicht auf diese weise. Hab versucht mit Pos() gibt auch 0 aus :( Ist es möglich alle #0 im string zu löschen? oder auf was anderes zu verändern? |
AW: Problem mit procedure Split()
PChar ist eigentlich in der System-Unit deklarier, welche automatisch eingebunden wird :gruebel:
Du könntest versuchen die #0 durch einen anderen trenner zu ersetzen (StringReplace()) |
AW: Problem mit procedure Split()
Also wenn ich einen PChar habe, und der zeigt auf Strings, die mit #0 voneinander getrennt sind, und zusätzlich habe ich noch die Gesamtlänge des Speicherbereiches, dann liegt es doch nahe, einfach mal durchzulaufen und ein ARRAY OF PCHAR oder eine TList zu erstellen, wenn man auf ein #0 stößt
Delphi-Quellcode:
Voraussetzung: Hinter dem letzten String ist ein #0.
Function SplitByNullChar (P : PChar; N : Integer) : TList;
Var I : Integer; C : Char; Begin Result := TList.Create; Result.Add(P); For I :=1 to N-1 Do begin C := P^; Inc(P); If C=#0 then Result.Add(P); End; End; Danach stehen in der TList lauter PChars, die jeweils auf das erste Zeichen des Tokens zeigen. Terminiert wird dieser String ja durch ein #0, nämlich den nächsten Delimiter. |
AW: Problem mit procedure Split()
Klingt elegant (ausser dass man höllisch aufpassen muss, wer die TList wieder freigibt). Aber soweit ich das verstanden habe MUSS es eine TStringList sein (Aufgabenstellung?). So gesehen läge es auch nahe, eine eigene Ableitung zu machen und im Setter
Delphi-Quellcode:
die #0 extra freundlich zu behandeln.
TMyStrings.SetDelimitedText
|
AW: Problem mit procedure Split()
Function SplitByNullChar (P : PChar; N : Integer) : TList;
PChar gibt es nicht :( |
AW: Problem mit procedure Split()
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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