Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Suchen und ersetzen (https://www.delphipraxis.net/158417-suchen-und-ersetzen.html)

Olle88 16. Feb 2011 19:39

Suchen und ersetzen
 
Hi,

ich versuche gerade nach einer gefühlten Ewigkeit wieder was mit Delphi zu programmieren und merke, dass ich mit vielen Sachen nicht mehr klar komme und weder die Hilfe noch google mir helfen will ;)

In meinem Prog möchte ich einen Text nach bestimmten evtl. mehrzeiligen Zeichenfolgen durchsuchen und diese dann durch andere Zeichenfolgen ersetzen, wobei der alte Text erhalten bleiben soll und zusätzlich der neue Text angezeigt wird.

Dazu hab ich mir zunächst gedacht, ich kopier den Text in Memobox1, gebe das zu suchende in Memobox2 und das wodurch ersetzt werden soll in Memobox3.
Dann speicher ich den Inhalt von Memobox1 in ner Variable (da weiß ich schon nicht was fürn typ die Variable sein muss, kann die ein einfacher string sein?) und durchsuch die dann nach dem Inhalt von Memobox2.
Zum durchsuchen ist mir bisher aber auch nur ne schleife eingefallen, die bei jedem Zeichen prüft, ob das Zeichen und die folgenden mit dem Inhalt der Memobox2 übereinstimmt. Dabei frag ich mich, ob das denn überhaupt mit den Zeilenumbrüchen funktionieren würde, oder obs da schon scheitert.
Am Ende wirds dann in Memobox3 ausgegeben.
Das ganze kommt mir aber sehr umständlich vor, da gibts doch sicher was eleganteres, oder?

Danke schonmal für eure Hilfe!

himitsu 16. Feb 2011 20:57

AW: Suchen und ersetzen
 
Ein einfacher String macht sich zum Erstetzen wohl am Besten.

Ansonsten Delphi-Referenz durchsuchenPos, bzw. Delphi-Referenz durchsuchenPosEx (suchen), Delphi-Referenz durchsuchenDelete (Altes löschen) und Delphi-Referenz durchsuchenInsert (Neues einfügen),
oder einfach nur Delphi-Referenz durchsuchenStringReplace.

Oder sogar direkt im Memo (das ist aber eher langsam), über Pos/PosEx, Delphi-Referenz durchsuchenTMemo.SelStart, Delphi-Referenz durchsuchenTMemo.SelLength und Delphi-Referenz durchsuchenTMemo.SelText.

-187- 16. Feb 2011 23:02

AW: Suchen und ersetzen
 
Du kannst es aber auch mit der Funktion StringReplace machen. Hier ein Ansatz..darauf kannst du aufbauen:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Original: TMemo;
    Neu: TMemo;
    Suchen: TEdit;
    Ersetzen: TEdit;
    Start: TButton;
    Start2: TButton;
    procedure StartClick(Sender: TObject);
    procedure Start2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

//Suchen & Ersetzen - Line-By-Line
procedure TForm2.StartClick(Sender: TObject);
var
  CopyText: TStringList;
  i: Integer;
begin
  CopyText:=TStringList.Create;
  try
    CopyText.Text:=Original.Text;
    for i:=0 to CopyText.Count-1 do
    if Pos(Suchen.Text,CopyText.Strings[i])>0 then
      CopyText.Strings[i]:=StringReplace(CopyText.Strings[i], Suchen.Text, Ersetzen.Text,[rfReplaceAll, rfIgnoreCase]);
    Neu.Text:=CopyText.Text;
  finally
    CopyText.Free;
  end;
end;

//Suchen & Ersetzen - Gesamt Text
procedure TForm2.Start2Click(Sender: TObject);
var
  CopyText: TStringList;
begin
  CopyText:=TStringList.Create;
  try
    CopyText.Text:=Original.Text;
    CopyText.Text:=StringReplace(CopyText.Text, Suchen.Text, Ersetzen.Text,[rfReplaceAll, rfIgnoreCase]);
    Neu.Text:=CopyText.Text;
  finally
    CopyText.Free;
  end;
end;

end.

Sir Rufo 16. Feb 2011 23:06

AW: Suchen und ersetzen
 
Ist der Helm kaputt oder warum nur in Code-Tags gesetzt?
EDIT: ahhh Selbstheilung :mrgreen:

-187- 16. Feb 2011 23:17

AW: Suchen und ersetzen
 
Mein letzter Edit war 5 nach 12 :) Dein Post kam 6 nach :bounce1:

Sir Rufo 16. Feb 2011 23:19

AW: Suchen und ersetzen
 
Zitat:

Zitat von -187- (Beitrag 1082338)
Mein letzter Edit war 5 nach 12 :) Dein Post kam 6 nach :bounce1:

jepp als ich es getippt und abgeschickt hatte, war es schon korrigiert, darum mein EDIT hinterher ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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