![]() |
FileStream von CSV-Datei um erste Zeile kürzen
Hi NG.
Delphi 4 (update 3) Hintergrund: Ich speichere von einer Webseite eine CSV-Datei per FileStream in eine Textdatei. Diese Textdatei lese ich anschließend mittels ASCIIDRV der BDE als Datentabelle ein. Dabei muss ich zwei Dinge beachten: a) Enthält die runtergeladene Datei den Text 'Keine Daten vorhanden', so kann und soll nichts ausgewertet werden. b) Sind Daten vorhanden, so enthält die CSV-Datei in der ersten Zeile die Header-Daten/Feldnamen der Tabelle. Diese Zeile soll nicht in die Textdatei gespeichert werden. Wie kann ich bereits beim Download Fall a) oder b) erkennen und darauf entsprechend beim Abspeichern in die Textdatei reagieren? Mein Code:
Delphi-Quellcode:
Wenn ich aber TFileStream richtig verstehe, speichert der bereits beim HTTP.Get alles in die Textdatei.
f := tfilestream.Create(sUhrkauf, fmOpenReadWrite);
try HTTP.Get(sUrl, f); f.Seek(soFromBeginning, 0) if (fRead( .... = 'Keine Daten vorhanden.') then KEIN SPEICHERN IN TEXTFILE else SPEICHERE BIS AUF DIE ERSTE ZEILE IN TEXTFILE finally f.Free; end; Kann mir jemand helfen? gruß, Peter P.S.: Ich möchte nicht den Umweg gehen und die gesichter Textdatei als Textfile öffnen und dann bearbeiten. |
Re: FileStream von CSV-Datei um erste Zeile kürzen
Ich habe jetzt mal in diversen Foren geblättert und mir dünkt es, dass ich bzgl. Streams und Dateien etwas falsch verstanden habe.
Wenn ich das richtig verstehe, kann ich aus bestehenden Streams bzw. Dateien nichts herauslöschen. Stattdessen muss ich einen zweiten Stream oder eine zweite Datei anlegen, in die ich alles vor dem zu löschenden Teil liegende reinkopiere und dahinter alles dem zu löschenden Teil folgende hereinkopiere. Dh. bildlich dargestellt, ich habe nicht die Möglichkeit aus einem aufeinanderliegenden Stapel Bücher eines herauszunehmen und die Schwerkraft sorgt dafür, dass die restlichen Bücher nachrutschen. :) Ist dieser Grundgedanke richtig? Gruß Peter |
Re: FileStream von CSV-Datei um erste Zeile kürzen
Zitat:
Tipp: Lade die Datei doch erstmal in einen TMemoryStream herunter (falls sie die Dateigröße in Grenzen hält). Dann kannst du erst einmal mit dem MemoryStream arbeiten, bevor überhaupt irgendetwas auf der Festplatte passiert. Tipp #2: Um die erste Zeile abzuschneiden könntest du bis zum ersten Vorkommen von #13#10 (Hex: $DA, "CR/LF" Windows Zeilenumbruch) suchen und dann erst nach dieser Position anfangen den Inhalt des MemoryStreams per f.CopyFromStream() in die Datei zu laden. Hoffe das hilft etwas =) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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