Delphi-PRAXiS
Seite 2 von 5     12 34     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 13. Mär 2008 09:33

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

Zitat von Union
Naja, vielleicht machen das manche Programme so mit dem ListSeparator.

EXCEL macht das so... Aber echt interessant (auch der Wiki-Artikel). Ich dachte, CSV hätte sich MS 1923 ausgedacht. So lange kenn ich das jedenfalls (ungefähr, mein Gedächtnis :gruebel: )

Union 13. Mär 2008 09:40

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Jedenfalls ist Deine Lösung gut und praktikabel. Eigentlich geht es ja nicht um die Therorie, sondern dass man es für bestehende "CSV"-Definitionen verwenden kann. Ich bin auch erst vor kurzem darauf gekommen, als ich zum Debuggen eine "CSV" mit Semikolon ausgegeben habe und der Microsoft LogParser das Format nicht erkannte. Die nennen das dann TSV mit Delimiter =";".

alzaimar 13. Mär 2008 09:45

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

Zitat von Union
Jedenfalls ist Deine Lösung gut und praktikabel.

:dancer:
Zitat:

Zitat von Union
Die nennen das dann TSV mit Delimiter =";".

:wall:

Union 13. Mär 2008 10:26

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Und wenn Du noch
Delphi-Quellcode:
SetString(Result, spFirst, spLen);
ersetzt mit
Delphi-Quellcode:
SetLength(result, spLen);
Move(spFirst^, result[1], spLen);
dann wird das auch schnell;)

deadcantdance 12. Dez 2008 14:02

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Kleiner Hinweis. Das o.g. Bespiel funktioniert so nicht ganz.

Beim ersten Durchlauf ist ColumnCount = 0, erst nach dem Aufruf von csvReader.Next wird ColumnCount gesetzt.

Sollte doch dann eigentlich so sein:

Delphi-Quellcode:
Try
  if not csvReader.Eof then
    csvReader.Next;
  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;
Ansonsten, :thumb:

Viele Grüße,
deadcantdance

alzaimar 14. Dez 2008 19:50

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
In der kleinen Demo fehlt der Aufruf von 'csvReader.First'. Habe ich nachgetragen (siehe Eingangspost).

Kater Karlo 7. Jan 2009 11:29

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

ggf. ist es sinnvoll im Constructor vor dem Read die Position des zu lesenden Stream auf Null zu setzen.
Es sei denn es ist beabsichtigt erst ab der aktuellen Stelle einzulesen.

Die Variable fReader: TReader; kann weggelassen werden.

Gruss Kater Karlo

alzaimar 7. Jan 2009 11:54

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Hallo Kater Karlo,

Es ist üblich, das der Aufrufer den Stream an die geeignete Stelle setzt, das muss er bei Verwendung anderer Komponenten (z.B. Crypter/Packer-Streams) auch selbst machen. Bei Instantiierung eines TFileStreams ist die Position eh bei 0.

Bezüglich deines Einwands mit dem Buffer fällt auf, das im Konstruktor ein kleine Ungenauigkeit auftritt, wenn die Position des Streams > 0 ist (wie du richtig bemerkt hast). Das sollte nun behoben sein.

Danke für die Anregungen

Kater Karlo 7. Jan 2009 13:46

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

ich hätte da noch einige Anregungen:

- Als Eigenschaft den Index der aktuellen Zeile
- Als Eigenschaft die aktuelle Zeile als String
- Veröffentlichen der Column-Information TStringPos

Extended:
- Erkennen von Kommentarzeilen (Zeile beginnt mit # oder über eine Eigenschaft bekannt zugebene Zeichenfolge)

MfG

Kater Karlo

ekoplayer 22. Feb 2009 20:04

Re: CSV-Reader. Schnelles lesen von CSV-Dateien
 
Kann mir einer vielleicht sagen wie ich beide die Datei zum laufen kriege?

Wenn ich sie abspeichern will sagt er mir immer Declaration of class TForm1 is missing or incorrect.

Und bei der zweiten Datei hinterlegt er das

Delphi-Quellcode:
 
csvReader : TCSVReader;
sData : TFileStream;
rot wenn ich es Compilieren will. kann mir wer helfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.
Seite 2 von 5     12 34     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