![]() |
StringHelper Methode Split fehlerhaft?
Hallo Zusammen,
hat jemand eine Erklärung dafür warum die Split Methode ein ArrayItem weniger hat wenn das letzte Element leer ist? Wenn ich Feld1-Feld4 jeweils mit einem String befülle und die Länge abfrage bekomme den richtigen Wert Length(splited) = 4. Ist das letzte Feld4 jedoch leer, ist Length(splited) = 3. Das kann doch nicht sein oder?
Delphi-Quellcode:
Gruß Kostas
procedure TForm1.Button3Click(Sender: TObject);
var s:string; splited:TArray<String>; Feld1,Feld2,Feld3,Feld4:string; begin Feld1 := 'F1'; Feld2 := 'F2'; Feld3 := 'F3'; Feld4 := 'F4'; // Feld4 := ''; s := s.Join(',',[Feld1,Feld2,Feld3,Feld4]); splited := s.Split([',']); ShowMessage(Length(splited).ToString()); end; |
AW: StringHelper Methode Split fehlerhaft?
Sieht so aus als wäre das wirklich ein Problem in TStringHelper.IndexOfAny() bzw. TStringHelper.InternalSplit zu sein und gehört wohl ins QC.
Ein Workaround für dich wäre momentan
Delphi-Quellcode:
s := s.Join(',',[Feld1,Feld2,Feld3,Feld4])+',';
das muss natürlich entfernt werden wenn es einen fix gibt. |
AW: StringHelper Methode Split fehlerhaft?
Was sagt denn die Doku?
Da scheint wohl per Default
Delphi-Quellcode:
gesetzt zu sein. Aber es gibt ja ein overload wo man diese Option mit
TStringSlitOptions.ExcludeEmpty
Delphi-Quellcode:
übergeben kann.
TStringSlitOptions.None
|
AW: StringHelper Methode Split fehlerhaft?
Hallo Sir Rufo,
habe ich ausprobiert. bei None (default) kommt genau das raus wie bei mir. Bei ExcludeEmpty werden alle leeren Felder entfernt. Das ist noch viel schlimmer da sich die Anzahl der Felder permanent ändern würde. Gruß Kostas |
AW: StringHelper Methode Split fehlerhaft?
Hallo Whookie,
das ist keine Option wie ich finde. Ich schreibe ein csv File raus welches Fremdsystem lesen sollen. Ich kann also nicht einfach ein weiteres Feld hinzufügen um nur das letzt Feld zu exportieren. Kann es wirklich sein dass es ein Bug ist? Und noch eins: Eigentlich hätte ich erwartet wenn ich beim Split die Start- und Ende Quote angebe, dass beim Spliten die Quote nicht dabei sind oder zumindest Einstellbar ist. Das ist nicht der Fall, sie werden immer exportiert.
Delphi-Quellcode:
Gruß Kostas
Splited := r.Split([','],'"','"');
|
AW: StringHelper Methode Split fehlerhaft?
Hallo Zusammen,
es kommt noch schlimmer: ich habe in einem Feldinhalt das: (§§") also Quote ich das Feld zu "(§§")" Split erkennt das nicht sauber wenn ich Start und Ende Quote char angebe.
Delphi-Quellcode:
Das Ergebnis
procedure TForm1.Button3Click(Sender: TObject);
var s,n:string; splited:TArray<String>; Feld1,Feld2,Feld3,Feld4:string; begin Feld1 := 'F1'; Feld2 := 'F2'; Feld3 := '"(§§")"'; Feld4 := 'F4'; s := s.Join(',',[Feld1,Feld2,Feld3,Feld4]); splited := s.Split([','],'"','"'); for n in splited do begin meDSBZMIVerein.Lines.Add(n); end; // ShowMessage(Length(splited).ToString()); end; F1 F2 "(§§")",F4 Also nur drei items! Gruß Kostas |
AW: StringHelper Methode Split fehlerhaft?
Für das was du da machen möchtest ist
Delphi-Quellcode:
in keinster Weise die richtige Wahl. Damit wird ein String stumpf an den Delimitern getrennt. Das ist die Aufgabe von dieser Methode.
String.Split
Was du suchst ist das, was
Delphi-Quellcode:
kann, indem du den
TStringList
Delphi-Quellcode:
zuweist. Es gibt noch die ein oder andere Eigenschaft, mit der du das Verhalten beeinflussen kannst (QuoteChar, Delimiter, StrictDelimiter).
DelimitedText
Hier wird dann auch die Struktur berücksichtigt (das was du suchst). |
AW: StringHelper Methode Split fehlerhaft?
Zitat:
Dankeschön. Gruß Kostas |
AW: StringHelper Methode Split fehlerhaft?
Delphi hat etwas integriert was das alles berücksichtigt und das schon bevor es die Helper gab und nennt sich
Delphi-Quellcode:
TStringList
|
AW: StringHelper Methode Split fehlerhaft?
Hallo Sir Rufo,
in der Doku zu DeQuotedString eindeutig dass das übergebene Quote char am Anfang und am Ende entfernt wird. In meinem Beispiel entfernt er alle.
Delphi-Quellcode:
Hast du eine Idee warum?
Feld3 := '"(§§")"';
memo.Lines.Add(Feld3.DeQuotedString('"')); ergibt: (§§) anstelle von (§§") Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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