Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   CSV-Reader. Schnelles lesen von CSV-Dateien (https://www.delphipraxis.net/110025-csv-reader-schnelles-lesen-von-csv-dateien.html)

alzaimar 11. Mär 2008 19:56


CSV-Reader. Schnelles lesen von CSV-Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ich habe mal eine Klasse geschrieben, die CSV-Dateien einliest und die einzelnen Elemente extrahiert. Dabei werden auch in '"' eingeschlossenen Strings korrekt erkannt.

Verwendet wird es so:
Delphi-Quellcode:
Var
  csvReader : TCSVReader;
  sData : TFileStream;

Begin
  sData := TFileStream.Create('Sample.CSV',fmOpenRead);
  csvReader := TCSVReader.Create (sData, ';');
  csvReader.First; // Nach Änderung auf Veranlassung von Grenzgaenger nun notwendig. Dank an 'deadcandance'
  Try
    While not csvReader.Eof Do Begin                                          
      For i:=0 to csvReader.ColumnCount - 1 Do                                
        Memo.Lines.Add (csvReader.Columns[i]);                                
      csvReader.Next;                                                        
    End;    
  Finally
    csvReader.Free;
    sData.Free;
  End;
End;
Es ist ziemlich flott. Vielleicht kann Jemand etwas damit anfangen.

Bugreports und Verbesserungsvorschläge sind natürlich erwünscht.

Bug: Grenzgaenger hat mich auf einen Fehler in der Behandlung von '""' aufmerksam gemacht. Weiterhin wünschte er sich den Quote-Character als Eigenschaft. Bitte sehr.
Erweiterung: ralfschwalbe hätte gern, das die Klasse auch mit UNIX-Umbrüchen umgehen kann. Bitte sehr.
Erweiterung: Noch besser: Man kann nun das EOL-Zeichen und die Länge selbst angeben (z.B. für Unix #10 und 1, Windows: #13 und 2)
Änderung: Laut grenzgaenger hat der Aufruf von 'First' im Konstruktor nix zu suchen. Recht hat er!
Bug: Kater Karlo hat einen Fehler im Konstruktor entdeckt, der bei Streams auftritt, deren Position>0 ist. Weiterhin ist ein überflüssiges privates Feld entfernt worden.

ralfschwalbe 12. Mär 2008 06:39

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Hi,

super Sache!

Aber ein Hinweis aus eigener Erfahrung: Du solltest unbedingt noch bedenken, dass es auch csv-Dateien mit UNIX Zeilenumbrüchen gibt!

Nicht das irgendwann mal was "schiefgeht"!

alzaimar 12. Mär 2008 08:55

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Hi ralf,

UNIX-Zeilenumbrüche sind nur ein CR, richtig? Das sollte kein Problem sein. Neue Version oben

marabu 12. Mär 2008 09:18

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Hi alzaimar,

nimm LF - ist besser so.

Freundliche Grüße

alzaimar 12. Mär 2008 09:25

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Hallo Marabu. Na gut, dann muss ich ja nochmal nachdenken :freak:

grenzgaenger 12. Mär 2008 23:20

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
hallo alzheimer,

vielleicht solltest du von den optionen her MAC, Unix und DOS unterstützen ... die trennzeichen sind wie folgt #13, #10, #13#10... und für kümimüsis #10#13 ;-), welche es eben verwechseln ... :-)

grüsse
GG

Tyrael Y. 13. Mär 2008 08:11

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Ein CSV Feldtrennzeichen kann ',' oder ';' sein.
Verarbeitest du beides oder nur eins von beiden?

U.u. wäre es dann gut als property das Trennzeichen mit angeben zu können.

Union 13. Mär 2008 09:15

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Schau Dir mal den constructor an:
Delphi-Quellcode:
Constructor TCSVReader.Create(aStream: TStream; aDelimiter: Char);
Zitat:

Ein CSV Feldtrennzeichen kann ',' oder ';' sein.
Stimmt eigentlich nicht. CSV-Trennzeichen ist NUR das Komma, (Comma Separated Values), alles andere hat man aus Praktikabilität erfunden. Ursprünglich war das Format nur für Zahlenkolonnen gedacht. Da die Amis nur den Punkt als Dezimaltrennzeichen verwenden, hat man dann eben das Komma als Delimiter benutzt.

alzaimar 13. Mär 2008 09:27

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Zitat:

Zitat von Union
Zitat:

Ein CSV Feldtrennzeichen kann ',' oder ';' sein.
Stimmt eigentlich nicht.

Doch. Das Trennzeichen ist der 'ListSeparator'. Und der ist in anglikanischen Ländern das Komma, bei uns das ';'. Und wenn Du pervers bist, dann kannst Du auch ein '@' nehmen. Einfach in den internationalen Einstellungen der Systemsteuerung setzen. Also macht das schon Sinn, das Trennzeichen vogeben zu können.

Union 13. Mär 2008 09:31

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Naja, vielleicht machen das manche Programme so mit dem ListSeparator. Aber die ganze Geschichte steht hier. Sehr interessant übrigens, dass erst 2005 versucht wird, dieses Uralt-Format zu standardisieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.
Seite 1 von 5  1 23     Letzte »    

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