Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   StringHelper Methode Split fehlerhaft? (https://www.delphipraxis.net/189498-stringhelper-methode-split-fehlerhaft.html)

Sir Rufo 19. Jun 2016 17:15

AW: StringHelper Methode Split fehlerhaft?
 
Ja, wenn ich in den QuellText der Helper-Methode schauen würde :stupid:

Uwe Raabe 19. Jun 2016 17:43

AW: StringHelper Methode Split fehlerhaft?
 
Zitat:

Zitat von Kostas (Beitrag 1340552)
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
Delphi-Quellcode:
'(§§")'.QuotedString('"')
zurückgibt.

Uwe Raabe 19. Jun 2016 17:49

AW: StringHelper Methode Split fehlerhaft?
 
Ach ja: TStringHelper.Split produces results different from SplitString from StrUtils

Kostas 19. Jun 2016 18:05

AW: StringHelper Methode Split fehlerhaft?
 
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

Sir Rufo 19. Jun 2016 18:36

AW: StringHelper Methode Split fehlerhaft?
 
Nein, dein Ausgangs-String ist falsch.

Delphi-Quellcode:
Falsch_ := '"F1","F2","(§§")","F4, F5"';
Richtig := '"F1","F2","(§§"")","F4, F5"';

Uwe Raabe 19. Jun 2016 18:47

AW: StringHelper Methode Split fehlerhaft?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1340568)
Nein, dein Ausgangs-String ist falsch.

Delphi-Quellcode:
Falsch_ := '"F1","F2","(§§")","F4, F5"';
Richtig := '"F1","F2","(§§"")","F4, F5"';

:thumb:
Genau das sollte mein Post darlegen. Der String ist einfach nicht korrekt gequoted.

Der Hinweis auf den QC-Eintrag sollte nur als Bestätigung dienen, daß es sich bei dem ersten Beispiel mit dem leeren letzten Feld vermutlich um einen Bug handelt.

Kostas 19. Jun 2016 19:03

AW: StringHelper Methode Split fehlerhaft?
 
Ja, ich habe jetzt das Problem erkannt. Der Text kann eigentlich nicht korrekt geparst werden, auch wenn es in meiner Methode bis jetzt immer funktioniert hat.
In meiner Methode suche ich nach Anführungszeichen Komme Anführungszeichen also "," oder "[CRLF] das hat bis jetzt "zufällig" funktioniert weil ich im Text nie das "," gehabt habe. :-)
Die Feldinhalte kommen eben aus einer Datenbank. Ein Anwender hat in ein Feld das (§§") eingegeben.
Das Problem ist ich darf das Anführungszeichen und Komma in den Feldinhalten nicht ersetzen und ich darf es auch nicht maskieren.
Es bleibt mir nur die Möglichkeit den Anwender aufzufordern das zu korrigieren.

Sehr interessant, seit Delphi5 Zeiten ist bis jetzt kein Anwender auf die Idee gekommen das "," einzugeben. :-)

Sir Rufo 19. Jun 2016 19:09

AW: StringHelper Methode Split fehlerhaft?
 
Was hat denn das mit dem Inhalt in der Datenbank zu tun?

Wenn überhaupt wird das falsch exportiert

Kostas 19. Jun 2016 19:25

AW: StringHelper Methode Split fehlerhaft?
 
Falsch Exportiert?

es gibt ein vorgeschriebenes Trennzeichen das Komma und jedes Feld muss mit Anführungszeichen exportiert werden.
Ich darf den Inhalt des Feldes nicht anfassen. Was könne ich jetzt noch machen?

[Edit] oh, es hat sich erledigt. Ich darf doch maskieren!

himitsu 20. Jun 2016 12:49

AW: StringHelper Methode Split fehlerhaft?
 
Zitat:

"(§§")"
Es kommt auch darauf an, wie gequotet wird.

In delphi wird meistens mit dem doppelten Quote-Zeichen das Zeichen selber geqoutet.

Also
Delphi-Quellcode:
"(§§"")"
und in Pascal halt
Delphi-Quellcode:
S := 'AGB''s \ blubb';
.
Und genau so verhällt sich auch das Quoting der TStringList.
In C-Sprachen wird dagegen gern das \ als Quotezeichen für Steuerzeichen benutzt, also
Delphi-Quellcode:
S := 'AGB\'s \\ blubb';
.
(Pascal kennt dagegen garkeine Steuerzeichen, außer dem ' oder halt ", während C auch Zeilenumbrüche ala '\n' und Co. versteht)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.
Seite 2 von 3     12 3      

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