![]() |
Text im Memo-Feld ersetzen
Hallo,
kann mir bitte einer erklären, wie ich folgende Sache am besten lösen kann: Ich habe eine Memo-Feld, in dem ein beliebiger Text steht. Jetzt habe ich eine Datei in der Text im folgenden Format steht:
Code:
Wie kann ich den Text im Memofeld nach den Zeichen vor dem Gleichheitszeichen (te1, te2, te3) durchsuchen und wenn der Text gefunden wurde durch den Text hinter dem Gleichheitszeichen (Text1, Text2, Text3) ersetzen?
te1=Text1
te2=Text2 te3=Text3 Vielen Dank für eure Hilfe! |
Re: Text im Memo-Feld ersetzen
Also du sprichst wenn z.B. te1 in Text 1 geändert werden soll, gleich Line 0 an (teX ist Linie X-1) und änderst. Hierbei mal nach POS, Copy, Delete suchen.
Oder aber du suchst gleich nach ersetzen oder so was. Auc ein Blick in die OH kann nicht schaden ;-) |
Re: Text im Memo-Feld ersetzen
Hallo,
einfache Lösung:
Delphi-Quellcode:
Viele Grüße,
Memo1.Text = StringReplace(Memo1.Text, 'te', 'Text', [rfReplaceAll, rfIgnoreCase]);
Delphianer |
Re: Text im Memo-Feld ersetzen
Moin Magoo,
schau Dir auf jeden Fall auch mal die Eigenschaft Values von TStrings bzw. TStringList an. Für eine Datei mit dem Aufbau name=wert könnte das hilfreich sein. Wenn Du nicht gerade zeilenübergreifend suchen musst, wäre es wahrscheinlich schneller das Memo mit alexanders Methode zu durchsuchen. Die Eigenschaft Text sollte man möglichst nicht verwenden, da sie immer erst aus den Zeilen aufgebaut, bzw. wieder auf die Zeilen aufgeteilt wird. |
Re: Text im Memo-Feld ersetzen
vielleicht meinst du es so:
Delphi-Quellcode:
das sieht nun erstmal wüst aus.. mit hilfe vom debugger und der delphi hilfe sollte es aber verständlich sein. ansonsten frag nach :)for i:=0 to Memo1.Lines.Count-1 do Memo1.Lines[i]:= copy( Memo1.Lines[i], Pos( '=', Memo1.Lines[i])+1, Length( Memo1.Lines[i])-Pos( '=', Memo1.Lines[i])-1)+ copy( Memo1.Lines[i], Pos( '=', Memo1.Lines[i]), Length( Memo1.Lines[i])-Pos( '=', Memo1.Lines[i])); mfg Edit: das sieht echt krass aus.. mal ein bissel aufdröseln, zum verständnis..
Delphi-Quellcode:
var StringNachDemGleich, StringAbDemGleich: String;
i: Integer; for i:=0 to Memo1.Lines.Count-1 do begin StringNachDemGleich:= copy( Memo1.Lines[i], Pos( '=', Memo1.Lines[i])+1, Length( Memo1.Lines[i])-Pos( '=', Memo1.Lines[i])-1); StringAbDemGleich:= copy( Memo1.Lines[i], Pos( '=', Memo1.Lines[i]), Length( Memo1.Lines[i])-Pos( '=', Memo1.Lines[i])); Memo1.Lines[i]:= StringNachDemGleich+StringAbDemGleich; end; |
Re: Text im Memo-Feld ersetzen
WOW, Vielen Dank für eure Hilfe.
Ich werde es gleich mal ausprobieren... |
Re: Text im Memo-Feld ersetzen
Also mit diesem copy und Pos und so komme ich einfach nicht klar...
Wie bekomme ich denn den Text vor dem Gleichheitszeichen heraus? Mit der Lösung von anku bekomme Text1 und =Text1 heraus. Ich möchte aber das te1 und Text1 heraus kommt. Es wäre echt nett wenn mir das einer posten könnte. @anku: Trotzdem vielen Dank! |
Re: Text im Memo-Feld ersetzen
Versuche mal:
Delphi-Quellcode:
...:cat:...
with Memo1.Lines do
for I := 0 to Pred(Count) do begin ShowMessage('Teil 1: ' + Names[I]); ShowMessage('Teil 2: ' + Values[Names[I]]); end; |
Re: Text im Memo-Feld ersetzen
@ sakura:
Super, so funktioniert es wunderbar. Genauso wollte ich es haben. Vielen Dank. |
Re: Text im Memo-Feld ersetzen
Wenn man weiß was Du willst ;-) Kein Problem, ich habe doch gerne geholfen ;-) Übrigens, diese Lösung solltest Du nur für recht "kleine" Listen mit z.B. weniger als 1000 Einträgen nutzen, damit es performant bleibt. Dann aber ist die genau richtig.
Hinweis: Der Teil vor dem "=" ist case-insensitive. ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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