![]() |
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 |
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. ?)
|
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? |
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.
|
Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,
Moin,
Zitat:
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 |
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? |
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 |
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? |
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:
Der Inhalt der Datei steht dann im String Inhalt.
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; Ich verstehe nicht was du da genau machen willst, deshalb nur das Beispiel zum Einlesen. MfG Thorsten |
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:
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.
Totti
AS Roma Ilary Christian 27 09 1976 Roma Italia ... 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 11:12 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