Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Worte im Text ersetzen (https://www.delphipraxis.net/170603-worte-im-text-ersetzen.html)

Seki99 25. Sep 2012 16:16

Worte im Text ersetzen
 
Hallo erstmal :)
Ich habe folgendes Problem: Ich habe einen Text im Edit Feld und eine Listbox mit weiteren Wörten. Meine Aufgabe ist nun, jedes der Wörter im Edit Feld mit den einträgen in der Listbox zu vergleichen, und wenn das Wort in der Listbox vorhanden ist, soll dieses Ersetzt werden. Eigentlich auch garnciht schwer.

Das ganze sieht folgendermaßen aus

Edit feld : 'Hallo ich bin Dieter' in der Listbox steht dann sowas wie 'Hallo,Guten Tag,Willkommen' an Position 0 und 'Dieter,Harald,Peter' an Position 2
Nun möchte ich die Wörter im Edit feld mit den ausdrücken aus der Listbox ersetzen. Bsp: 'Hallo,Guten Tag,Willkommen ich bin Dieter,Harald,Peter'

Das ersetzen an sich ist nicht das Problem, das habe ich bereits mit Pos() gelöst, jedoch will ich nicht nur 1 Wort ersetzen, sondern jedes im Text. Könnte mir jemand helfen wie ich
die worte nacheinander durchgehe? Wenn ich nur 'Dieter' eingebe, ersetzt er Problemlos den eintrag mit 'Dieter,Harald,Peter'. Ich hoffe ich konnte mein Problem ausreichend schildern und ihr versteht was ich damit meine :)

Danke für eure hilfe

nuclearping 25. Sep 2012 16:17

AW: Worte im Text ersetzen
 
Stichworte:

- Pos (kennst du ja schon)
- Copy
- Delete
- StringReplace Funktion -> NeuerString := StringReplace(AlterString, Muster, Ersetzung, ...)

Popov 25. Sep 2012 17:00

AW: Worte im Text ersetzen
 
Also Seki, ich hab zwar nicht in allen Einzelheiten dein Problem verstanden, aber hier ein Beispiel wie man einen Text in Wörter zerlegen kann.

Delphi-Quellcode:
procedure StringZerlegen(Str: String; List: TStrings);
const
  abc = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ßäÄöÖüÜ';
var
  OldDelimiter: Char;
  i, k: Integer;
  s: String;
begin
  //Zerlegt Satz in Wörter
  OldDelimiter := List.Delimiter;
  List.Delimiter := ' '; //Leerzeichen
  List.DelimitedText := Str;
  List.Delimiter := OldDelimiter;

  //Entfernt alles was nicht Buchstabe oder Zehl ist
  for i := 0 to List.Count - 1 do
  begin
    s := List[i];
    for k := Length(s) downto 1 do
      if Pos(s[k], abc) = 0 then
        Delete(s, k, 1);
    List[i] := s;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Str: String;
begin
  Str := 'Hallo, ich bin Dieter.'; //Satz mit Satzzeichen
  StringZerlegen(Str, ListBox1.Items);
end;
Der Satz landet in einer TStringList (oder hier für das Beispiel eine ListBox).

Vielleicht hilft dir das bereits.

DeddyH 25. Sep 2012 17:08

AW: Worte im Text ersetzen
 
Versteh ich das richtig, dass das zu ersetzende Wort in der Listbox-Zeile an erster Stelle, gefolgt von einem Komma, steht? Dann müsstest Du dieses zuerst temporär herauskopieren und dann StringReplace anwenden.


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