AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Delphi-Quellcode:
geschrieben, der das umsetzt:
TTextReader
Delphi-Quellcode:
type
TTextReaderHelper = class helper for TTextReader function CharCount(const ALine: string; AChar: Char): Integer; procedure ReadQuotedLine(Target: TStrings); end; function TTextReaderHelper.CharCount(const ALine: string; AChar: Char): Integer; var C: Char; begin result := 0; for C in ALine do begin if C = AChar then Inc(result); end; end; procedure TTextReaderHelper.ReadQuotedLine(Target: TStrings); var line: string; line2: string; saveStrictDelimiter: Boolean; begin line := ReadLine; if Odd(CharCount(line, Target.QuoteChar)) then begin { Eine ungerade Anzahl von Quotes bedeutet, daß der gequotete String mindestens einen Zeilenumbruch enthält. Wir hängen also die nachfolgenden Zeilen mit LineBreak an, bis eine weitere Zeile mit ungerader Anzahl Quotes kommt. } repeat line := line + sLineBreak; line2 := ReadLine; line := line + line2; until Odd(CharCount(line2, Target.QuoteChar)); end; { Zeilenumrüche in line dürfen nicht in separate Einträge zerlegt werden! } saveStrictDelimiter := Target.StrictDelimiter; try Target.StrictDelimiter := True; Target.CommaText := line; finally Target.StrictDelimiter := saveStrictDelimiter; end; end; |
AW: csv Datei Import ClassHelper für TClientDataSet
@Schokohase
Zitat:
Try it! @Rollo62 Header wird erzeugt wenn nicht vorhanden @Uwe Raabe Auch elegant gelöst! Ist aber nur ein Teil der Aufgabe;) |
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Code:
Meine Testdaten
EStringListError: Listenindex außerhalb des gültigen Bereichs (3)
Delphi-Quellcode:
oder als Text
'a;b;c;d' + sLineBreak +
'a;"b;b";"c'#10'c";d'
Code:
Du solltest schon wissen, was dir TStringList abnimmt und vor allem ab wann.
a;b;c;d
a;"b;b";"c c";d Im Übrigen fängst du erst ab der 2. Zeile mit dem Import an - auch wenn der Parameter
Delphi-Quellcode:
auf
FirstLineTitle
Delphi-Quellcode:
steht.
false
|
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Code:
If X=0 and (not FirstLineTitle)
Zitat:
Und wie oft ist dir dein Beispiel im Alltag begegnet? Wobei auch deine Konstellation unter meinen Voraussetzungen läuft. Hmm:roll: |
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Ich kann es dir also nicht sagen, wie oft mein Beispiel im Alltag vorkommt, denn keiner bemerkt es, weil es anstandslos funktioniert. |
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Zitat:
|
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Die zweite Zeile sieht in Delphi-String-Schreibweise so aus
Delphi-Quellcode:
.
'a;"b;b";"c'#13#10'c";d'
(aber auch so ist es gültig
Delphi-Quellcode:
)
'a;"b;b";"c'#10'c";d'
Sieht du jetzt was da zwischen den Quote-Zeichen steht? Das ist 100% gültig nach RFC4180. PS Wenn du wissen möchtest, was so alles RFC4180 konform ist, dann kannst du gerne deine Dateien mit dem Webdienst http://csvlint.io/ überprüfen lassen. Allerdings wird dort zwingend das Komma als Feld-Trenner gefordert. Und diese Datei
Code:
findet der total gut (was auch zu erwarten war, weil RFC4180 konform)
a,b,c,d
aa,"b,b","c c",dd |
AW: csv Datei Import ClassHelper für TClientDataSet
Du sprichst immer von Dateien, könntest du mir das Beispiel als Datei zur Verfügung stellen?
Hab keine Lust dafür zu coden und möchte auch keinen Hex-Editor dafür bemühen. |
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
|
AW: csv Datei Import ClassHelper für TClientDataSet
Zitat:
Selbst mit Notepad+ gelingt es mir nicht, sonst würde ich nicht danach fragen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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