![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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