AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language TStringList, StrictDelimiter, DelimitedText und Leerzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList, StrictDelimiter, DelimitedText und Leerzeichen

Ein Thema von swestner · begonnen am 7. Jan 2025 · letzter Beitrag vom 7. Jan 2025
Antwort Antwort
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
81 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 07:40
Delphi-Version: 12 Athens
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
Stefan Westner
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.396 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 07:46
Definiere mal den Delimiter...
lStringList.Delimiter := ',';
  Mit Zitat antworten Zitat
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
81 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 07:48
, 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
Stefan Westner

Geändert von swestner (Gestern um 07:51 Uhr)
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
26 Beiträge
 
Delphi 12 Athens
 
#4

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:09
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?
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
705 Beiträge
 
Delphi 12 Athens
 
#5

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:19
, und ,<leer> oder ,<leer><leer> usw. sollen laut Hilfe keinen Unterscheid machen.
Wo steht das? Ich habe es jedenfalls nicht gefunden.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
761 Beiträge
 
#6

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:25
Was wenn du QuoteChar explizit setzt?
  Mit Zitat antworten Zitat
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
81 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:27
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...
Stefan Westner
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
705 Beiträge
 
Delphi 12 Athens
 
#8

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:35
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.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
26 Beiträge
 
Delphi 12 Athens
 
#9

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:36
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 StrictDelimiter := True weglässt. Siehe Beitrag von bcvs.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
761 Beiträge
 
#10

AW: TStringList, StrictDelimiter, DelimitedText und Leerzeichen

  Alt Gestern, 08:38
Es ist so wie es ist aber kompatibel zu Excel

Habe gerade Mal getestet mit ";" anstatt "," wegen deutschem Excel.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 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 by Thomas Breitkreuz