Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text im Memo-Feld ersetzen (https://www.delphipraxis.net/9077-text-im-memo-feld-ersetzen.html)

magoo2002de 17. Sep 2003 18:19


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:
te1=Text1
te2=Text2
te3=Text3
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?

Vielen Dank für eure Hilfe!

Alexander 17. Sep 2003 18:53

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 ;-)

Delphianer 17. Sep 2003 20:43

Re: Text im Memo-Feld ersetzen
 
Hallo,

einfache Lösung:

Delphi-Quellcode:
Memo1.Text = StringReplace(Memo1.Text, 'te', 'Text', [rfReplaceAll, rfIgnoreCase]);
Viele Grüße,

Delphianer

Christian Seehase 17. Sep 2003 21:42

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.

anku 18. Sep 2003 00:11

Re: Text im Memo-Feld ersetzen
 
vielleicht meinst du es so:

Delphi-Quellcode:

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]));
das sieht nun erstmal wüst aus.. mit hilfe vom debugger und der delphi hilfe sollte es aber verständlich sein. ansonsten frag nach :)

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;

magoo2002de 18. Sep 2003 21:56

Re: Text im Memo-Feld ersetzen
 
WOW, Vielen Dank für eure Hilfe.
Ich werde es gleich mal ausprobieren...

magoo2002de 22. Sep 2003 15:07

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!

sakura 22. Sep 2003 15:11

Re: Text im Memo-Feld ersetzen
 
Versuche mal:

Delphi-Quellcode:
with Memo1.Lines do
  for I := 0 to Pred(Count) do
  begin
    ShowMessage('Teil 1: ' + Names[I]);
    ShowMessage('Teil 2: ' + Values[Names[I]]);
  end;
...:cat:...

magoo2002de 22. Sep 2003 16:34

Re: Text im Memo-Feld ersetzen
 
@ sakura:
Super, so funktioniert es wunderbar. Genauso wollte ich es haben. Vielen Dank.

sakura 22. Sep 2003 16:44

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 02:55 Uhr.

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