AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein StringHelper Methode Split fehlerhaft?
Thema durchsuchen
Ansicht
Themen-Optionen

StringHelper Methode Split fehlerhaft?

Ein Thema von Kostas · begonnen am 19. Jun 2016 · letzter Beitrag vom 20. Jun 2016
Antwort Antwort
Seite 1 von 2  1 2      
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#1

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 16:26
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:
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;
Das Ergebnis
F1
F2
"(§§")",F4

Also nur drei items!


Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 16:34
Für das was du da machen möchtest ist String.Split in keinster Weise die richtige Wahl. Damit wird ein String stumpf an den Delimitern getrennt. Das ist die Aufgabe von dieser Methode.

Was du suchst ist das, was TStringList kann, indem du den DelimitedText zuweist. Es gibt noch die ein oder andere Eigenschaft, mit der du das Verhalten beeinflussen kannst (QuoteChar, Delimiter, StrictDelimiter).

Hier wird dann auch die Struktur berücksichtigt (das was du suchst).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 16:46
Für das was du da machen möchtest ist String.Split in keinster Weise die richtige Wahl. Damit wird ein String stumpf an den Delimitern getrennt. Das ist die Aufgabe von dieser Methode....
Das ist der richtige Hinweis! Die Methode Split ist nicht dafür geeignet. Ich habe seit Delphi5 eine eigene Methode die das alles berücksichtigt. Ich dachte die kann ich vergessen wenn Delphi das jetzt integriert hat.

Dankeschön.
Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 16:57
Delphi hat etwas integriert was das alles berücksichtigt und das schon bevor es die Helper gab und nennt sich TStringList
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#5

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 17:10
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:
Feld3 := '"(§§")"';

memo.Lines.Add(Feld3.DeQuotedString('"'));

ergibt: (§§) anstelle von (§§")
Hast du eine Idee warum?

Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 17:15
Ja, wenn ich in den QuellText der Helper-Methode schauen würde
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 17:43
ich habe in einem Feldinhalt das: (§§") also Quote ich das Feld zu "(§§")"
Sollte das nicht eher "(§§"")" sein? Andernfalls wird das zweite Anführungzeichen als Quoteende interpretiert und das dritte wieder als Quoteanfang.

Zumindest ist es das, was '(§§")'.QuotedString('"') zurückgibt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 17:49
Ach ja: TStringHelper.Split produces results different from SplitString from StrUtils
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#9

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 18:05
Hallo Uwe,

Bei SplitString kann ich leider das Quote char nicht angeben.
Somit bringt das auch nichts.

Delphi-Quellcode:
  Feld1 := '"F1"';
  Feld2 := '"F2"';
  Feld3 := '"(§§")"';
  Feld4 := '"F4, F5"';
SplitString macht daraus fünf Felder anstelle von vier. Ist schon klar warum weil eben das Anführungszeichen nicht berücksichtigt werden.

Es geht um das einlesen von CSV-Dateien Trennzeichen ist das Komma und alle Felder sind mit Anführungszeichen umschlossen.
Somit erwarte ich für den String "F1","F2","(§§")","F4, F5"[CRLF] genau vier Felder
1=F1
2=F2
3=(§§")
4=F4, F5
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 18:36
Nein, dein Ausgangs-String ist falsch.

Delphi-Quellcode:
Falsch_ := '"F1","F2","(§§")","F4, F5"';
Richtig := '"F1","F2","(§§"")","F4, F5"';
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Jun 2016 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:18 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