Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FileStream von CSV-Datei um erste Zeile kürzen (https://www.delphipraxis.net/62696-filestream-von-csv-datei-um-erste-zeile-kuerzen.html)

PASST 8. Feb 2006 11:24


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:
  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;
Wenn ich aber TFileStream richtig verstehe, speichert der bereits beim HTTP.Get alles in die Textdatei.

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.

PASST 8. Feb 2006 13:55

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

H4ndy 9. Feb 2006 14:48

Re: FileStream von CSV-Datei um erste Zeile kürzen
 
Zitat:

Zitat von PASST
[...]Ist dieser Grundgedanke richtig?

Ich denk schon =)

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 01:05 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