Archiv verlassen und diese Seite im Standarddesign anzeigen : Reset, Rewrite (& ...?)
freak182
25.06.2002, 10:18
moin,
ich versuche grade ein .txt logfile für ein programm das ich schreibe zu machen. es soll also für jeden eintrag eine neue zeile verwendet werden. in jeder zeile steht das datum und die zeit (mit getdate....) und ein kommentar.
das problem ist momentan das ich mit "RESET" nur eine vorhandene datei lesen kann, aber nichts in die datei schreiben kann und mit "REWRITE" gleich eine neue datei öffne, die löscht ja, wie jeder weiß, die vorhandene. :mauer: wie kann ich also einfach neue zeilen in der datei anhängen?
mfg,
timoK.
Du öffnest die Datei mit Reset(f), springst dann ans Ende der Datei mit Seek(f, FileSize(f)), und scheibst mit Writeln(f, "25/06/2002, 10:36: blablablablablabla") den eintrag.
feddich :)
freak182
25.06.2002, 11:49
also ich bin mir ziemlich sicher das man seek nicht auf eine text datei anwenden kann.
wenn es doch gehen sollte, was gebe ich als FileSize an?
wie genau komme ich mit seek an's ende der datei?
mfg,
timoK.
Felix Kaiser
25.06.2002, 12:32
Turbo Pascal hat ja im Gegensatz zu Delphi noch starke Differenzen zwischen dem Zugriff auf Textdateien und auf binäre Dateien. Falls Seek nicht funktionieren sollte, wie von DerWolf genannt, versuchs binär:
var
LogFile: file;
procedure OpenLog;
begin
Assign(LogFile,'MEINE.LOG');
Reset(LogFile,1);
Seek(LogFile,FileSize(LogFile));
end;
procedure WriteLog(Line: string);
var
dest: string;
begin
dest:= Line+#13#10;
BlockWrite(LogFile,dest[1],Length(dest));
end;
procedure CloseLog;
begin
Close(LogFile);
end;
freak182
25.06.2002, 13:14
hmm...so kann ich es auch noch einmal probieren. erstmal habe ich es jetzt anders gelöst. :)
ich habe einfach die bestehende datei in einem array gesichert, dann die datei neu mit rewrite geöffnet, die neue zeile eingefügt und dann das gesicherte aus dem array in die .txt geschrieben. das hat auch noch zum vorteil das die datei nicht endlos lang wird sondern bei auf 100 einträge begrenzt ist. der älteste eintrag wird so gelöscht und dafür am anfang der datei die neue zeile eingefügt.
aber danke an "DerWolf" und "Felix Kaiser"...
ich werde mich sicher bald mit was neuem melden...;)
Diogenes
25.06.2002, 19:06
@freak182:
Das geht durchaus. Du könntest allerdings auch folgendes probieren:
Erstens: Kein Array nehmen, sondern eine verkettete Liste. Neue Log-Zeile hinten anhängen, fertig. Wenn Platz zu schwinden droht, vorne ein Element entfernen.
Zweitens: Verwindung von file of string. Dann ist Seek verwendbar, aber man muß dabei wissen, daß dann jeder datensatz 255 Bytes verbraucht, egal, was drin steht.
Tach nochmal,
hab das mit seek vergessen. naja, jedenfalls kann man an dateien vom typ Text ganz einfach ne neue zeile dranhängen indem man sie mit Append(f) öffnet :) reset öffnet sie nämlich nur für leseoperationen. append setzt den dateizeiger sofort ans ende und man kann dann mit Writeln(f, 'blabla'); ne neue zeile reinschreiben. Das funzt jetz aber!! habs getestet :)
Cu
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.