![]() |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Zitat:
|
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 =";".
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Zitat:
Zitat:
|
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
Und wenn Du noch
Delphi-Quellcode:
ersetzt mit
SetString(Result, spFirst, spLen);
Delphi-Quellcode:
dann wird das auch schnell;)
SetLength(result, spLen);
Move(spFirst^, result[1], spLen); |
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:
Ansonsten, :thumb:
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; Viele Grüße, deadcantdance |
Re: CSV-Reader. Schnelles lesen von CSV-Dateien
In der kleinen Demo fehlt der Aufruf von 'csvReader.First'. Habe ich nachgetragen (siehe Eingangspost).
|
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 |
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 |
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 |
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:
rot wenn ich es Compilieren will. kann mir wer helfen?csvReader : TCSVReader; sData : TFileStream; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz