Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suchen eines bestimmten Strings in einer TextFile (https://www.delphipraxis.net/9065-suchen-eines-bestimmten-strings-einer-textfile.html)

Rapthor 17. Sep 2003 14:54


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 ?

Christian Seehase 17. Sep 2003 14:58

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.

Dannyboy 17. Sep 2003 15:04

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

Burning_Chrome 17. Sep 2003 15:10

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

johny 17. Sep 2003 15:30

Re: Suchen eines bestimmten Strings in einer TextFile
 
Wenn es wirklich zeilenweise ist, kannst du mit folgender Prozedur zumindst den String finden:

Delphi-Quellcode:
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;
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.

So, dann muss die Zeile eben noch gelöscht und neu geschrieben werden. Da kann ich dir spontan leider kein Beispiel geben.

Rapthor 17. Sep 2003 15:34

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.

Rapthor 17. Sep 2003 16:46

Re: Suchen eines bestimmten Strings in einer TextFile
 
Hab johny's Sache folgendermaßen umgeschrieben:

Delphi-Quellcode:
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;
Er sucht aber nur genau 'test' und nicht etwa 'test=shfghdjs'. Sondern eben nur, wenn test alleine in einer eigenen Zeile steht. :cry:

flomei 17. Sep 2003 16:50

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:

urs.liska 17. Sep 2003 17:05

Re: Suchen eines bestimmten Strings in einer TextFile
 
Probiers mal mit
Delphi-Quellcode:
s1.Values['name'] := 'neuer Wert';
Das dürfte aber nur gehen, wenn es nur eine Zeile mit 'name=...' gibt.
Dazu gibt's noch die Methode TStringList.IndexOfName, die Dir die Zeilennummer zurückgibt
Viel Erfolg
Urs

Rapthor 17. Sep 2003 17:37

Re: Suchen eines bestimmten Strings in einer TextFile
 
Wie jetzt? Wohin denn GENAU mit der Zeile?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz