![]() |
Suchen eines bestimmten Strings in einer TextFile
Ich brauch eine Anweisung, die mir die Zeichenkette 'xyz' in einer von mir festgelegten Datei (TextFile) sucht und sie durch eine andere Zeichenkette 'abc' ersetzt. Das alles jedoch ohne die ganze Datei neu schreiben zu müssen, sondern nur dass er mir die eine Zeile ersetzt.
Geht das ? |
Re: Suchen eines bestimmten Strings in einer TextFile
Moin Rapthor,
ja, sollte gehen. Du könntest die Datei mit einem TFileStream öffnen, dann die Datei durchlesen, bis Du die gewünschte Stelle gefunden hast (Eigenschaft Position merken), und an diese wird dann der Ersatz geschrieben. Das funktioniert natürlich nur, wenn der gesuchte Text genauso lang ist wie der neue. |
Re: Suchen eines bestimmten Strings in einer TextFile
Servus Rapthor,
lies mal Zeile für Zeile mittels read(f, Stringvariable) aus der Datei aus und checke die Stringvariable periodisch mit der Funktion POS nach Deinem Substring. Sollte POS <> 0 sein, dann änderst Du den Substring mit den allgemeinen Stringfunktionen Delete, Concat , etc.., und schreibst ihn direkt wieder in Deine Textfile hinein. Sieh Dir erst mal die Funktion POS in der Hilfe an, denn damit ermittelst Du, ob ein Substring (Teilstring) in einem String vorhanden ist. Gruß DANNYBOY |
Re: Suchen eines bestimmten Strings in einer TextFile
Hi!
@rapthor: ist IMHO keine gute idee. wenn waerend dem schreiben was schiefgeht (sprich absturz) ist die datei u.u. weg. am vernuenftigsten und schnellsten waere: datei blockweise (je groesser desto besser) in den speicher, text ersetzen, in eine neue datei schreiben, wenn getan, alte datei loeschen (oder als backup umbenannt stehen lassen) und neue umbenennen. wie du oben beschrieben hast, gehts wirklich nur wie christian meint, wenn xyz genau gleich lang ist wie abc... Best_Regards Burning_Chrome |
Re: Suchen eines bestimmten Strings in einer TextFile
Wenn es wirklich zeilenweise ist, kannst du mit folgender Prozedur zumindst den String finden:
Delphi-Quellcode:
In diesem Beispiel würde er nach 'MARKER' suchen. Gut, die Meldung wird hier nur angezeigt, um zu sehen, dass es funktioniert. Die fällt in deinem Programm natürlich weg.
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList; zeilennr: integer; begin sl:=TStringList.Create; //Objekt erzeugen try sl.LoadFromFile(ExtractFilePath(Application.ExeName) + 'File1.txt'); for zeilennr:=0 to sl.Count-1 do begin if sl[zeilennr]='MARKER' then ShowMessage('MARKER gefunden in Zeile '+IntToStr(zeilennr+1)); //Meldung ausgeben end; finally sl.free; //Objekt wieder freigeben end; end; So, dann muss die Zeile eben noch gelöscht und neu geschrieben werden. Da kann ich dir spontan leider kein Beispiel geben. |
Re: Suchen eines bestimmten Strings in einer TextFile
Hmm das ist ja doof.
Also eigentlich such ich ja nen String meinetwegen 'Name=' und ich weiß dass hinter dem '=' ein paar Zeichen stehen, die ich aber dynamisch (d.h. egal welche Anzahl Zeichen) durch einen neuen String ersetzen will. Die zu bearbeitende Datei könnte wie folgt aussehen: Ort=abcdefg Straße=fghij 21 Name=blablubb Vorname=bubabu Und der User soll jetzt seinen Namen eingeben, den ich halt für "blablubb" einsetze. Der kann natürlich länger oder kürzer sein. |
Re: Suchen eines bestimmten Strings in einer TextFile
Hab johny's Sache folgendermaßen umgeschrieben:
Delphi-Quellcode:
Er sucht aber nur genau 'test' und nicht etwa 'test=shfghdjs'. Sondern eben nur, wenn test alleine in einer eigenen Zeile steht. :cry:
var
sl: TStringList; z : integer; ...... procedure TForm6.Button1Click(Sender: TObject); begin sl:=TStringList.Create; try sl.LoadFromFile('Datei.ini'); for z := 0 to sl.Count -1 do begin if sl[z]='test' then ShowMessage('test gefunden in Zeile ' + IntToStr(z+1)); end; finally sl.free; end; end; |
Re: Suchen eines bestimmten Strings in einer TextFile
Weiss auch nicht wie das jetzt geht aber dazu brauchst du eigentlich Wildcards. Sowas wie * in Suchen usw. Vielleicht kann man das auch anders machen aber ich denke das ist ein Läsungsansatz.
MfG Florian :hi: |
Re: Suchen eines bestimmten Strings in einer TextFile
Probiers mal mit
Delphi-Quellcode:
Das dürfte aber nur gehen, wenn es nur eine Zeile mit 'name=...' gibt.
s1.Values['name'] := 'neuer Wert';
Dazu gibt's noch die Methode TStringList.IndexOfName, die Dir die Zeilennummer zurückgibt Viel Erfolg Urs |
Re: Suchen eines bestimmten Strings in einer TextFile
Wie jetzt? Wohin denn GENAU mit der Zeile?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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