Einzelnen Beitrag anzeigen

Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#10

Re: CSV-Datei in Stringgrid bringen

  Alt 6. Nov 2009, 05:32
Hallo Leute,
doch es ist wirklich so einfach und allgemeingültig und keineswegs eine Einschränkung
Die Überprüfung einer Zeile auf ungerade Anzahl der Quotes ist die Beantwortung der Frage "IstInQuote".
Trennzeichen innerhalb Quotes sind durch die Quotes neutralisiert und spielen damit keine Rolle
Quotes selber innerhalb Text werden verdoppelt, damit sind sie gerade und spielen ebenfalls keine Rolle.

Nehmen wir das Beispiel und stellen wir uns vor, daß ein in eine StringList geladen wurde.

Hallo;1;"dad
sdfsfaf";"aa"""
Hallo;1;"dad
sdfsfaf""";aa


1.) Nimm erste QuellZeile
-> Hallo;1;"dad

2.) Zähle Quotes
-> 1 ungerade

3.) da ungerade MUSS Zeilenumbruch in letzter "QuellZeilenzelle" vorliegen, also nächste Zeile dazunehmen
-> Hallo;1;"dad#13#10sdfsfaf";"aa"""

4.) Zähle Quotes
-> 6 gerade

5.) da gerade ist also erste Ziel-CSVZeile komplett eingelesen. Nächste QuellZeile nehmen
-> Hallo;1;"dad

6.) Zähle Quotes
-> 1 ungerade

7.) da ungerade MUSS Zeilenumbruch in letzter "QuellZeilenzelle" vorliegen, also nächste Zeile dazunehmen
-> Hallo;1;"dad#13#10sdfsfaf""";aa

8.) Ergebnis also zwei echte Zeilen
Hallo;1;"dad#13#10sdfsfaf";"aa"""
Hallo;1;"dad#13#10sdfsfaf""";aa

Die 3.Zelle der 1.Zeile hat also den Inhalt
Zitat:
dad#13#10sdfsfaf
Die 3.Zelle der 2.Zeile hat also den Inhalt
Zitat:
dad#13#10sdfsfaf"
Das lässt sich sehr effizient in einer normalen Stringlist ohne Fremdkomponente realisieren

Das Beispiel mit dem TCSVReader verwendet im Prinzip eine ähnlichen Ansatz indem er schaut ob pro Zeile die Spaltenanzahl stimmt. Wenn nicht, dann nimm nächste Zeile dazu ...
-> aber es könnte sein, daß der Ansatz über die TStringlist effizienter ist ? ...
Peter Schaible
  Mit Zitat antworten Zitat