Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStringList, StrictDelimiter, DelimitedText und Leerzeichen (https://www.delphipraxis.net/216491-tstringlist-strictdelimiter-delimitedtext-und-leerzeichen.html)

swestner 7. Jan 2025 06:40

Delphi-Version: 12 Athens

TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Hallo,

folgende Prozedur:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  lStringList: TStringList;
begin
  lStringList := TStringList.Create;
  try
    lStringList.StrictDelimiter := true;
    lStringList.DelimitedText := '"Test 1","Test 2","Test mit , (3)","Test4"';
      //Test 1
      //Test 2
      //Test mit , (3)
      //Test4

    lStringList.DelimitedText := '"Test 1", "Test 2", "Test mit , (3)", "Test4"';
      //Test 1
      // "Test 2"
      // "Test mit
      // (3)"
      // Test4

  finally
    lStringList.free;
  end;
end;
Wenn beim Zuweisen zum DelimitedText nach dem Komma Leerzeichen sind, wird der Text nicht wie erwartet zugewiesen obwohl die Hilfe sagt, daß Leerzeichen egal sein sollten.

Weiß jemand, was da schief geht?

Grüße

Stefan

haentschman 7. Jan 2025 06:46

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Definiere mal den Delimiter... :wink:
Delphi-Quellcode:
lStringList.Delimiter := ',';

swestner 7. Jan 2025 06:48

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
, als delimiter ist Standard. Da muß ich nichts definieren.

, und ,<leer> oder ,<leer><leer> usw. sollen laut Hilfe keinen Unterscheid machen.

Und es sollen ja auch Fälle wie "Test","Test", "Test" usw. behandelt werden

itsChris 7. Jan 2025 07:09

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Zitat:

Zitat von swestner (Beitrag 1544871)
Code:
    lStringList.DelimitedText := '"Test 1","Test 2","Test mit , (3)","Test4"';
      //Test 1
      //Test 2
      //Test mit , (3)
      //Test4

    lStringList.DelimitedText := '"Test 1", "Test 2", "Test mit , (3)", "Test4"';
      //Test 1
      // "Test 2"
      // "Test mit
      // (3)"
      // Test4
end;

Moin,
was erwartest du hier als Ausgabe bzw. als "richtigen" Inhalt deiner Stringliste? Sollen die Anführungszeichen enthalten sein oder nicht?

bcvs 7. Jan 2025 07:19

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Zitat:

Zitat von swestner (Beitrag 1544873)
, und ,<leer> oder ,<leer><leer> usw. sollen laut Hilfe keinen Unterscheid machen.

Wo steht das? Ich habe es jedenfalls nicht gefunden.

Delphi-Quellcode:
StrictDelimiter := true
bedeutet doch nur, dass das Leerzeichen kein Trennzeichen ist, sondern wie behandelt wird wie jedes andere Zeichen auch. Also alles was nach dem Trennzeiczhen kommt, gehört zur neuen Zeile, auch das Leerzeichen.

Olli73 7. Jan 2025 07:25

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Was wenn du QuoteChar explizit setzt?

swestner 7. Jan 2025 07:27

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Ich erwarte als Ausgabe wie es per Definition sein sollte und wie es ohne Leerzeichen nach dem Komma auch funktioniert:

Test 1
Test 2
Test mit , (3)
Test4

In der Hilfe steht:

When assigning DelimitedText, the value is parsed as SDF formatted text. For SDF format, strings are separated by Delimiter characters or spaces, and optionally enclosed in QuoteChar characters. QuoteChar marks that are part of the string are repeated to distinguish them from the QuoteChar characters that surround the string. Spaces and Delimiter characters that are not contained within QuoteChar marks are delimiters. Two Delimiter characters next to each other will indicate an empty string, but spaces that appear next to another Delimiter character are ignored.

Das feet markierte interpretiere ich so, daß Leerzeichen und Kommas potentielle Delimter sind wobei Delimiter=',' ist und damit Leerzeichen außerhalb von "" ignoriert werden sollten.

Aber das ist nur meine Interpretation...

bcvs 7. Jan 2025 07:35

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Zitat:

Zitat von swestner (Beitrag 1544877)
Spaces and Delimiter characters that are not contained within QuoteChar marks are delimiters.

Das heiß nicht, dass Leerzeichen ignoriert werden, sondern dass Leerzeichen als Trennzeichen gehandelt werden. Aber auch nur solange StrictDelimiter false ist.
Da du StrictDelimiter auf true gesetzt hast, ist das Leerzeichen nach dem Trennzeichen ein ganz normales Zeichen und wird nicht ignoriert.

itsChris 7. Jan 2025 07:36

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Zitat:

Zitat von swestner (Beitrag 1544877)
Ich erwarte als Ausgabe wie es per Definition sein sollte und wie es ohne Leerzeichen nach dem Komma auch funktioniert:

Test 1
Test 2
Test mit , (3)
Test4

Dann sollte es reichen, wenn du das mit
Delphi-Quellcode:
StrictDelimiter := True
weglässt. Siehe Beitrag von bcvs.

Olli73 7. Jan 2025 07:38

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen
 
Es ist so wie es ist aber kompatibel zu Excel ;)

Habe gerade Mal getestet mit ";" anstatt "," wegen deutschem Excel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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