![]() |
Text ersetzen
Hallo,
ich möchte gerne bestimmten Text, den ich aus einem Textfile lade ersetzen und in einem neuen Textfile speichern. Dafür habe ich zwei Memofelder, 4 Buttons und folgenden Code eingefügt:
Delphi-Quellcode:
Wie kann ich nun verhindern, dass nicht der komplette übereinstimmende Text ersetzt wird.
procedure TForm1.Button1Click(Sender: TObject);
begin Memo1.Lines.LoadFromFile('C:\Test.txt'); end; procedure TForm1.Button2Click(Sender: TObject); begin Memo2.text:=StringReplace(Memo1.text,'RFU','RFU_CON',[rfReplaceAll, rfIgnoreCase]); end; procedure TForm1.Button3Click(Sender: TObject); begin Memo2.Lines.SavetoFile('C:\Test2.txt'); end; procedure TForm1.Button4Click(Sender: TObject); begin close; end; Ich möchte zum Beipiel, dass in einer Zeile nur das erste Wort geprüft wird und dort ersetzt. Wenn das Wort an dritter Stelle vorkommt, möchte ich kein Ersetzen durchführen. Hat jemand einen Tipp? Danke und Gruß, axmarq |
Re: Text ersetzen
Hallo, anstatt das StringReplace auf den kompletten Text loszulassen, könntest Du das Memo zeilenweise durchgehen (for i := 0 to Memo.Lines.Count - 1), schauen, ob der gesuchte Text am Zeilenanfang steht (if Pos(Suchtext, Memo.Lines[i] = 1) und dann ggf. mit StringReplace(ohne rfReplaceAll) den Text ersetzen.
|
Re: Text ersetzen
Hallo,
Zitat:
Edit: Zu Deiner eigentlichen Frage: Basierend auf dem Vorschlag von DeddyH könntest Du Dir eine eigene StringReplace-Funktion schreiben, an welche Du dann noch die zu überprüfende Textposition übergibst. |
Re: Text ersetzen
Hallo,
vielen Dank für Eure Antworten. Zunächst mal zu s-off: Wo liegt der Vorteil, wenn ich eine Stringlist nehme? Zu DeddyH: Ich habe mal versucht Deine Idee umzusetzen. Bin aber leider gescheitert. Habe den Code jetzt mal so umgeändert.
Delphi-Quellcode:
Ich weiß nicht wie ich jetzt den StringReplace einbaue und wie ich die if-Schleife verwende :roll:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer; begin for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('RFU', Memo1.Lines[i] = 1) then StringReplace(Memo1.text,'RFU','RFU_CON',[rfIgnoreCase]); end; Könnt Ihr einem Anfänger nochmal mit Rat und Tat zur Seite stehen. Danke und Gruß, axmarq |
Re: Text ersetzen
Delphi-Quellcode:
So sollte es ungefähr funktionieren.
for i := 0 to Memo1.Lines.Count - 1 do begin
if Pos('RFU', Memo1.Lines[i] = 1) then Memo1.lines[i]:=StringReplace(Memo1.lines[i],'RFU','RFU_CON',[rfIgnoreCase]); end; Weil, Du willst ja nur den Text in der Zeile ersetzen wo er denn auch aufgetaucht ist. Und, if-Schleifen gibt es nicht. Grüße Klaus |
Re: Text ersetzen
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer; begin Memo2.Clear; Memo2.Lines.BeginUpdate; for i := 0 to Memo1.Lines.Count - 1 do if Pos('rfu',AnsiLowerCase(Memo1.Lines[i])) = 1 then Memo2.Lines.Add(StringReplace(Memo1.Lines[i],'rfu','RFU_CON',[rfIgnoreCase])) else Memo2.Lines.Add(Memo1.Lines[i]); Memo2.Lines.EndUpdate; end; |
Re: Text ersetzen
Der Vorteil ist der, dass Du alles, was Du jetzt mit Deinen beiden Memos anstellst, auch in einer Stringliste abhandeln kannst.
|
Re: Text ersetzen
Und wenn er das gar nicht will? Wenn ich das richtig verstanden habe, will er eine Datei laden, den Text ersetzen und dann unter anderem Namen abspeichern. Die Memos dienen da wohl als eine Art Preview. :)
|
Re: Text ersetzen
Hallo Zusammen,
vielen Dank für die zahlreichen Antworten. Auch für den Hinweis mit der Stringlist. Vielleicht kann ich das ja irgendwann verwenden. In diesem Fall soll es tatsächlich als Vorschau dienen. Ich habe den Code von DeddyH verwendet und es funzt prima. Perfekt! :lol: Vielleicht kannst Du mir aber noch erklären wofür AnsiLowerCase steht. Ich wills schließlich auch verstehen. Vielen Dank nochmal. axmarq |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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