![]() |
viel Mist in einer Textdatei
Hallo hab mal eine Frage zur Arbeit mit meiner Textdatei. Mchte einen Programmablauf dokumentieren und habe schon einige Fileformate in Delphi probiert. Womit ich zumindest Erfolg hab war das Filformat "file of string[255]" allerdings schreibt er mir dann ne Menge Mist, welcher noch in dem String ist (von mir aber nicht reingeschrieben wurde, sondern allte Daten) mit in meine Datei. Das fhrt zu folgendem Datei aussehen:
Zitat:
Vielen dank BAMatze |
Re: viel Mist in einer Textdatei
Er scheint eine AnsiString-Datei als Unicode zu interpretieren
|
Re: viel Mist in einer Textdatei
Wenn Du einen String[255] definierst, musst Du diesen auch vor dem Schreiben initialisieren (FillChar(Zu_schreibender_String,#0)). Ansonsten ist TextFile doch eigentlich das passende Format.
|
Re: viel Mist in einer Textdatei
Was ich bei Textfile nicht verstehe, ist dass seek immer einen Fehler bringt, wenn die Datei in der ich springen mchte von diesem Typ ist. Fehlermeldung "inkompativle Typen".
|
Re: viel Mist in einer Textdatei
Was mchstest Du mit Seek eigentlich erreichen?
|
Re: viel Mist in einer Textdatei
In "Textfile"s darf nicht ge"seek"t werden, du kannst allerdings mit Append(txtfile); an das Ende der Datei springen um Zeilen anzufgen
Delphi-Quellcode:
der "Mist" Resultiert aus dem LngenByte des verwendeten ShortStrings (string[255]) und aus der Tatsache,
const
Filename = 'foo.txt'; var txt:Textfile; begin AssignFile(txt, Filename); if FileExists(Filename) then Append(txt) // An's Ende der Datei "seek"en else Rewrite(txt); // Datei erstellen, falls nicht vorhanden {....} Writeln(txtx, 'blaa'); {....} CloseFile(txt); end; dass der String nur teilweise mit neuen Daten befllt wird, aber mit den vollen 255 Zeichen {+ Lngenbyte?} geschrieben wird *Edit: AssignFile statt Assign {noch aus TP -Zeiten :mrgreen: } |
Re: viel Mist in einer Textdatei
Es ist mir noch nicht ganz klar, was du machen mchtest, aber vielleicht wre eine TStringList und deren Methode SaveToFile eine Alternative?
|
Re: viel Mist in einer Textdatei
Bis zu einer gewissen Gre kann man zudem mit einer TStringList recht komfortabel arbeiten, nicht zuletzt wegen des indizierten Zugriffs auf einzelne Zeilen (was u.U. die Funktion von Seek ein Stck weit nachbilden kann). Ab ein paar MB an Text wrde ich dann aber dazu raten nicht mehr ganze Files in die Liste zu schlabbern. Der groe Vorteil: Speichern/Laden ist schon fertig eingebaut, und resultiert in "mllfreien" Textfiles ;)
|
Re: viel Mist in einer Textdatei
Hi,
hier eine Funktion fr Seek mit TextFiles:
Delphi-Quellcode:
function TextSeek(var F : TextFile; Target : LongInt) : Boolean;
var Pos : LongInt; begin with TTextRec(F) do begin Result := False; if Mode <> fmInput then Exit; Pos := FileSeek(Handle, 0, FILE_CURRENT); if Pos = -1 then Exit; Dec(Pos, BufEnd); Pos := Target-Pos; if (Pos >= 0) and (Pos < BufEnd) then BufPos := Pos else begin if FileSeek(Handle, Target, FILE_BEGIN) = -1 then Exit; BufEnd := 0; BufPos := 0; end; end; Result := True; end; |
Re: viel Mist in einer Textdatei
Danke euch, das Append hat genau den Effekt gehabt, den ich erreichen wollte. Hier fr alle der dementsprechende Quellcode und das Ergebnis in der Datei:
Delphi-Quellcode:
(ist nur kurzer Auszug aus der Procedure)
Assign(fTempFile, ExtractFilePath(ParamStr(0))+ 'Temp\' + Speicherverzeichnis.sTempDatei);
if FileExists(ExtractFilePath(ParamStr(0))+ 'Temp\' + Speicherverzeichnis.sTempDatei) = true then Reset(fTempFile) else Rewrite(fTempFile); Append(fTempFile); writeln(fTempFile,Text); closeFile(fTempfile); und hier die jetzt wesentlich ansehnliche Datei: Zitat:
|
Re: viel Mist in einer Textdatei
Und das funktioniert? In Delphi heit es doch AssignFile, Assign stammt noch aus TP-Zeiten und hat unter Delphi eine andere Bedeutung. Und wieso Reset?
Delphi-Quellcode:
So in etwa wrde ich das machen (aus dem Kopf getippt, die Fehlermeldung ggf. etwas detaillierter, dazu muss man sich IOResult genauer ansehen).
sFile := ExtractFilePath(ParamStr(0))+ 'Temp\' + Speicherverzeichnis.sTempDatei;
{$I-} AssignFile(fTempFile, sFile); if FileExists(sFile) then Append(fTempFile) else Rewrite(fTempFile); {$I+} if IOResult = 0 then writeln(fTempFile,Text) else MessageBox(0,'Fehler beim ffnen der Datei',nil,MB_OK or MB_ICONERROR); closeFile(fTempfile); |
Re: viel Mist in einer Textdatei
Hmm also hat Funktioniert mir dem Assign, ist mir bisher noch gar nicht aufgefallen, dass dort der Befehl nicht richtig ist, hab es aber jetzt auch in AssignFile gendert, Danke nochmal. Was machen die Anweisungen: {$I-} und {$I+}?
Ps.: kann auch sein, da ich die Position der Erstellung der Datei noch lokalisieren musste, dass ich eine weitere Anweisung AssignFile im Programm habe, schaue ich gleich nochmal sauber durch. |
Re: viel Mist in einer Textdatei
Zitat:
|
Re: viel Mist in einer Textdatei
Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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