![]() |
Schreiben einer Zeile in ein Textfile - need help, THX
Hallo zusammen,
ich lese schon seid einigen Monaten hier mit, doch jetzt hab ich nen Problem und stehe im Wald... Ich möchte an die Stelle im unterem Source Code "Hilfe benötigt" einen bestimmten Inhalt in die Textdatei schreiben, der Inhalt vor und nach der Position (linecounter)muß erhalten bleiben... die Position an der geschrieben werden soll "linecounter" sein. Wenn ich Rewrite / Write benutze wird der gesamte Inhalt des Files gelöscht und das will ich nicht. Beispiel des Textfiles: ############################################# 12345 x xyz --------> hier soll z.B. 12346 --------> x xyz eingetragen werden 12347 x xyz #############################################
Code:
...
var ZIFF_0,ZIFF_1, POS_1, POS_2, linecounter: integer; pfad,Jahreszahl,tempstr,CurrentLine, SearchLine, filenameold, filenamenew : string; myFile: Textfile; ... while not eof(myfile) do //solange bis das Dateiende erreicht ist begin ReadLn(myFile, CurrentLine); //Datei zeilenweise durchsuchen und Ergebnis der Zeile nach CurrentLine linecounter:=linecounter+1; //Zeile ++ if IsValidInteger(CurrentLine) then //gültige Integerzahl gefunden ?? begin POS_1:= linecounter; //wird für später benötigt ZIFF_1:= StrToInt(Currentline); if ZIFF_0 < ZIFF_1 then begin POS_2:=linecounter; //geht auch mit FilePos, ich weis :) showmessage ('Insert '+IntToStr(ZIFF_0)+ ' here on Position Line ' + IntToStr(POS_2) + '.' ); //Debug, Stelle in Datei und Wert passt 1a //ReWrite(myFile); //Write (myFile,'Write Test here'); //hier wird die HILFE benötigt !!!! CloseFile(myfile); CopyFile(filenameold,filenamenew); exit; end .... |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Eventuell wäre die Verwendung einer TStringList einfacher?
(dort gibt es soeine schöne Insert-Methode) aber hier würde es im Prinzip so gehn
Delphi-Quellcode:
bzw.
while not eof(myfile) do
begin ReadLn(myfile, S); WriteLn(otherfile, S); if {hier einfügen?} then begin WriteLn(otherfile, 'dieses NACH der gelesenen Zeile einfügen'); end; end;
Delphi-Quellcode:
while not eof(myfile) do
begin ReadLn(myfile, S); if {hier einfügen?} then begin WriteLn(otherfile, 'dieses VOR der gelesenen Zeile einfügen'); end; WriteLn(otherfile, S); end; |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Habe mich noch nie so wirklich mit TSringListen Dateibasierend auseinandergesetzt.
Werde mal probehalber nen kleines neues Projekt mit diesem Denkansatz aufsetzen... Bekam da bisher immer EInOutError E/A Fehler etc, sobald ich WriteLn benutzt hab.... Schön wäre jedoch eine Lösung Textfile basierend ... Es muß doch aber auch eine einfache Lösung Textfilebasierend geben, das war bisher so schön logisch mit den Textfiles das ganze, nun scheitert es an so einer einfachen Funktion, das macht mich stutzig... |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Falls die Datei zu groß sein sollte, könnte man es auch ungefähr so machen:
Delphi-Quellcode:
und zum Schluß infile löschen und outfile umbenennen.var infile, outfile : textfile; dataline : string; repeat ... readln(infile,dataline); if dataline=Bedingung then begin {..irgendwelche Vorarbeiten ..} writeln(outfile,newline); {..irgendwelche Vorarbeiten ..} end; writeln(outfile,dataline) .. until eof(infile); natürlich SetTextbuf verwenden (32-64k)! Gruß K-H edit:
Delphi-Quellcode:
var
sl : tStringlist; begin sl:=tstringlist.create; sl.LoadfromFile(MeineTextdatei); for i:=0 to sl.count-1 do if copy(sl[i],1,...)=Meinebedingung then begin ..... sl.insert(Anposition); ..... end; sl.SavetoFile(MeineTextdatei); sl.free; end; |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Die Textdateien sind maximal 100-200 kb groß, also Minifiles !
|
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Na dann spricht überhaupt nichts gegen TStringlist!
Gruß K-H edit: Zitat:
Zitat:
(Tstringlist ist DIE Möglichkeit um "Textdateien" zu bearbeiten) |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Zitat:
Zitat:
|
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Append hängt aber nur hinten an, ist also zum Einfügen mittendrin auch nicht geeignet.
|
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Naja ich werd mal gucken wie das mit den TSringlist funzt, werd mal den o.g. Codeabschnitt probieren umzustellen auf TsringLists...
Melde mich wieder, falls es Probs gibts/bzw fall ich es gelöst hab... APPEND hab ich auch im Code drin, das ist aber wie schon gesagt nur gut, wenn man am Ende entweas einfügen will, ich will aber Abhängig von bestimmten Conditions auch in dem File etwas einfügen und nicht nur am Ende... |
Re: Schreiben einer Zeile in ein Textfile - need help, THX
Hi...
ich bin gerade kurz angebunden aber schau doch mal in der Hilfe nach, da gibt es glaube ich auch ein INSERT oder so etwas für Texdateien. Gruß Mike //Edit... das war mit einer StringList... gerade mal einen Teil heraus kopiert...
Delphi-Quellcode:
SLWriteSn.LoadFromFile(GetCurrentDir + PathDelim + cfg);
s := SLWriteSn.Text; ipos := Pos('Contact', s); i2 := PosEx(#13#10, s, ipos); i2 := i2+1; if i2 > i then begin //ShowMessage(IntToStr(i2)); s2 := copy(s,0, i2); //ShowMessage(s2); Insert('PUTSERIAL '+StartingHexAdress + ' ' +NewSn+ #13#10, s2, i2); i2 := PosEx(#13#10, s, i2); Insert('PUTSERIAL '+PSKeyHexAdress+ ' '+Label6.Caption+#13#10, s2, i2 ); i2 := PosEx(#13#10, s, i2); Insert('PUTSERIAL '+MACHexAdress+ ' '+Label8.Caption+#13#10, s2, i2 ); //ShowMessage(s2); SLWriteSn.Text := s2; SLWriteSn.SaveToFile(GetCurrentDir + PathDelim + cfg); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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