Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Lesen, Schreiben und mehr in Textdateien - TFileStream, ...? (https://www.delphipraxis.net/56870-lesen-schreiben-und-mehr-textdateien-tfilestream.html)

Totti 12. Nov 2005 15:10


Lesen, Schreiben und mehr in Textdateien - TFileStream, ...?
 
Hi, gleich zu Beginn die Problemstellung:
Ich möchte in einer Textdatei lesen und gerne auch schreiben ... und zwar möglichst nach folgender Sytax ...

while x=t do readln(f,x); //das macht er beispielsweise 10x, weil dann zeile 11 netmehr gleich t ist
zeile_11:=u;
etc.

Also, das Problem ist halt, dass ich ja in der schleife die zeile 11 schon gelesen habe und der zeiger nun bereits am ender der 11 (bei read) bzw. am anfang der 12er (bei readln) steht und ich für ein bearbeiten der 11. zeile die ganze datei von vorne lesen müsste ... da ich wohlgemerkt momentan mit f: textfile; arbeite.

Hab nun schon bisch gesucht und co und selbstverständllich bin ich auf die tfilestreams gestoßen - doch scheint mir das mit denen auch nicht gerade ein kinderspiel zu werden, mit textdateien zu arbeiten.

Was ist eurer meinung nach die beste Lösung?
Vielen Dank im Voraus,

Malte

SirThornberry 12. Nov 2005 15:19

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
bei FileStream gibt es kein ReadLn, du musst also zeischen für Zeischen durchgehen und den Zeilenumbrauch suchen. Im übrigen gibt es bestimmt auch funktionen um im textfile die position zu ändern (seek etc. ?)

Totti 12. Nov 2005 15:49

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
ne, seek läuft net bei textfile

Und mit TFilestream müsste ich statt readln dann immer ne funktion verwenden, die alle zeichen bis zum nächsten crlf ausgibt, gel?

SirThornberry 12. Nov 2005 15:57

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
genau, readln macht ja letztendlich auch nix anderes als die datei zu lesen bis ein zeilenumbruch kommt, und das musst du dir eben selbst schreiben.

omata 12. Nov 2005 15:58

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
Moin,

Zitat:

Zitat von SirThornberry
...du musst also Zeischen für Zeischen durchgehen...

das bedeutet man nimmt "file of byte" und dort geht dann auch seek.

Aber was ich nicht verstehe ist das Schreiben. Durch so ein Vorgehen kannst du die Länge einer Zeile nicht verändern. Wie stellst du dir das vor?

MfG
Thorsten

Totti 14. Nov 2005 14:02

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
hmm, nunja .... hab ich j a hinbekommen.
Ich krieg aber nur Zeichen ersetzt - muss ich nu für jede Zeilenänderung alle nachfolgenden Zeichen nach vorne ziehen/nach hinten schieben?!?

Gibbet da absolut keine Alternative?

BrunoT 14. Nov 2005 14:20

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
Hallo lotti,

Versuchs mal mit TStrings, da liest du die ganze Datei mit LoadFromFile ein, änderst die Zeilen, und schreibst sie wieder mit SaveToFile zurück.

mfg

BrunoT

Totti 25. Nov 2005 17:05

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
ne TSTringList verschlingt leider zuviele Ressourcen, braucht ergo zu lange ...
das sind Textdatein zwischen 400kb und 4MB ... da kommen einige Zeilen zusammen, leider :(

Aber wie es aussieht, muss es dann halt länger dauernn, was?

omata 25. Nov 2005 22:21

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
Hallo,

schau dir doch mal BlockRead und BlockWrite an.

Hier ein Beispiel, ich habe eine 11MB Datei ohne Probleme sehr schnell eingelesen.

Delphi-Quellcode:
procedure Einlesen;
var Datei: file;
    Laenge:integer;
    Inhalt:string;
begin
  assignfile(Datei, 'datei.txt');
  try
    reset(Datei, 1);
    Laenge:=FileSize(Datei);
    setlength(Inhalt, Laenge);
    BlockRead(Datei, Inhalt[1], Laenge);
  finally
    CloseFile(Datei);
  end;
end;
Der Inhalt der Datei steht dann im String Inhalt.

Ich verstehe nicht was du da genau machen willst, deshalb nur das Beispiel zum Einlesen.

MfG
Thorsten

Totti 26. Nov 2005 08:56

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
 
dann hab ich nen paar zigtausend zeichen in nem string .... ja.

Wie gesagt, ich muss lesen und bearbeiten, ich vesuch mal nen Beispiel zu konstruieren:
Delphi-Quellcode:
Totti
AS Roma
Ilary
Christian
27
09
1976
Roma
Italia
...
Und das nen paar tausend Mal. Nun geh ich von oben jede Zeile durch ... und wenn ich beispielsweise auf die Zeile 1976 Stoße, möchte ich die Zeile drüber (hier 09) verändern.
Mit ReadLn/WirteLn, also nem "textfile" klappt das ja so nicht - und ne Stringlist war mir zu langsam - aber wie es ausschaut, momentan der einzig vernünftige weg.

Es sei denn, ich arbeite mit deinem Monsterstring und arbeite mich dadrin vor und zurück ... dann zieh ich aber glaub ich doch eher ne List vor, ist komfortabler.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Seite 1 von 4  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