AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein StringHelper Methode Split fehlerhaft?

StringHelper Methode Split fehlerhaft?

Ein Thema von Kostas · begonnen am 19. Jun 2016 · letzter Beitrag vom 20. Jun 2016
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Sir Rufo
Sir Rufo

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

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
10.993 Beiträge
 
Delphi 12 Athens
 
#12

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
10.993 Beiträge
 
Delphi 12 Athens
 
#13

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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

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
 
#15

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
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: StringHelper Methode Split fehlerhaft?

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

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

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.
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 19:03
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.
  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
 
#18

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 19:09
Was hat denn das mit dem Inhalt in der Datenbank zu tun?

Wenn überhaupt wird das falsch exportiert
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: StringHelper Methode Split fehlerhaft?

  Alt 19. Jun 2016, 19:25
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!

Geändert von Kostas (19. Jun 2016 um 20:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#20

AW: StringHelper Methode Split fehlerhaft?

  Alt 20. Jun 2016, 12:49
Zitat:
"(§§")"
Es kommt auch darauf an, wie gequotet wird.

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

Also "(§§"")" und in Pascal halt 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 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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz