![]() |
In TextFile eine Zeile ändern
Hallo,
ich habe ein TextFile dass so anfängt:
und halt dann ewig weitergeht. ich möchte jetzt die Zahl da hochzählen können und in die Datei schreiben. Finden der Zeile und so mach ich wie folgt:
Delphi-Quellcode:
(eigendlich sinnlos, dass ich das hier poste)
Assignfile(F, ExtractFilePath(Application.ExeName)+'saves\accounts.tt');
Reset(F); Repeat ReadLn(F, temp); until pos('IENTRYCOUNT',temp) <> 0; IEntrycount := StrToInt(copy(temp,pos('=',temp)+1,length(temp))); closeFile(F); hoffentlich kann mir da einer helfen. mfg kenu |
Re: In TextFile eine Zeile ändern
Moin Kenu,
Du kannst doch, parallel zum Lesen der eigentlichen Datei, noch eine neue, temporäre erzeugen, und einfach die Zeilen, die unverändert bleiben sollen wieder dorthin wegschreiben. Die eine zu verändernde Zeile änderst Du hierbei entsprechend. Ist der Inhalt umkopiert, löscht Du die Quelldatei, und benennst die Zieldatei auf den Namen der Quelldatei um. Wenn das nur gelegentlich passiert, könntest Du die Datei auch einfach in eine TStringList laden, diese durchgehen, bis Du die gewünschte Zeile gefunden hast. Dann die Zeile ändern, und die Datei wieder wegschreiben. |
Re: In TextFile eine Zeile ändern
ja..... das mit so einer 2. datei hab ich bis jetzt auch immer gemacht.... find das aber nun nicht so schön. zumal die jetztige datei auch mal locker so mehrere mb groß werden kann.
ich dachte mir, da gibts irgendeine andere lösung. |
Re: In TextFile eine Zeile ändern
ich denke mal, mit einer TStringlist lässt sich das vorhaben leichter bewerkstelligen.
Pseudocode:
Delphi-Quellcode:
HTH Frank
loadfromfile
for i:=0 to sl.count-1 do if isTheLine(sl.strings[i]) then sl.strings[i]:=... sl.savetofile |
Re: In TextFile eine Zeile ändern
Hallo kenu,
wenn du sicherstellen kannst, dass die fragliche Zahl immer den gleichen offset im file hat, dann kannst du die Zahl mit blanks auf eine definierte Länge bringen und den Zähler inplace patchen:
Delphi-Quellcode:
Getippt und nicht getestet.
function IncCounter(fn: TFileName; dwOffset, dwLength: Cardinal): Cardinal;
var value: String; begin with TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyWrite) do begin Position := dwOffset; SetLength(value, dwLength); ReadBuffer(value[1], dwLength); Result := StrToIntDef(Trim(value), 0) + 1; value := IntToStr(Result); Position := dwOffset; WriteBuffer(value[1], dwLength); Free; end; end; Grüße vom marabu |
Re: In TextFile eine Zeile ändern
kannst du das bitte für einem voll-delphi-idioten nochmals übersetzten. habe von deinem satz nicht viel verstanden.
|
Re: In TextFile eine Zeile ändern
Hallo kenu,
nach deinem Beispiel im Beitrag #1 steht die Zahl (1) an der Stelle 56 (offset 55) - wenn ich mich nicht verzählt habe. Offset gibt an, wieviel Zeichen übersprungen werden sollen. Wenn du also den Wert hochzählen willst, dann kannst du das mit einer Routine machen, wie ich dir eine gegeben habe. Als dwOffset übergibst du dann 55 und als dwLength 1. Damit kannst du aber nur bis 9 hochzählen. Willst du mehr, dann musst du meine Routine geringfügig abändern oder nochmal nachfragen. Hast du denn schon versucht den Code zu verstehen? Grüße, marabu |
Re: In TextFile eine Zeile ändern
ja... versucht schon.. ich konnte aber mit dem begriff offset nichts anfangen. dank dir.... ich weiß aber leider nicht, wo die zahl nun steht, kann variieren.
taj.. dann muss ich das wohl mit dem 2 datein machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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 by Thomas Breitkreuz