Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi teil suchen aber ganzen satz ersetzen [PLS Hilfe] (https://www.delphipraxis.net/97601-teil-suchen-aber-ganzen-satz-ersetzen-%5Bpls-hilfe%5D.html)

0NyX 13. Aug 2007 12:39


teil suchen aber ganzen satz ersetzen [PLS Hilfe]
 
Guten tag liebe DP User,

ich arbeite zur Zeit an einem eigl. kleinen tool für einen Freund.
Ich habe nun das meiste schon fertig, jedoch komme ich gerade nicht weiter.
Also bei dem "Tool" handelt es sich um einen kleinen Text-Editor.

Der Texteditor soll nun nach einer Stelle im text suchen (diese stelle sollte der nutzer selbst defienieren können) und dann soll aber der ganze Satz und nicht nur die eine gesuchte Stelle eretzt werden.
Leider habe ich keine Ahnung wie man so was macht :(
Über Hilfe würde ich mich echt freuen, vielen Dank im voraus!

Hier mein bisheriger Code:
Delphi-Quellcode:
unit text2;

interface

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

type
  TForm1 = class(TForm)
    MainMenu: TMainMenu;
    Datei1: TMenuItem;
    Aoeffnen: TMenuItem;
    Speichern1: TMenuItem;
    Schlieen1: TMenuItem;
    StatusBar: TStatusBar;
    RichEdit: TRichEdit;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    Neu1: TMenuItem;
    Ersetzen1: TMenuItem;
    Zeile7durchtest21: TMenuItem;
    RichEdit2: TRichEdit;
    BestimmtenSatzersetzen1: TMenuItem;
    Satzfindenundersetzen1: TMenuItem;
    Hier_wird_der_Text_angezeigt_welcher_zum_ersetzen_dient: TStaticText;
    search: TEdit;
    Suche: TLabel;
    procedure Schlieen1Click(Sender: TObject);
    procedure AoeffnenClick(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
    procedure Zeile7durchtest21Click(Sender: TObject);
    procedure BestimmtenSatzersetzen1Click(Sender: TObject);
    procedure neuestring1Click(Sender: TObject);
    procedure Satzfindenundersetzen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Schlieen1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.AoeffnenClick(Sender: TObject);
begin
  If Opendialog.Execute then
  begin
    if FileExists(OpenDialog.Filename) then
    begin
      Richedit.Lines.LoadfromFile(OpenDialog.Filename);
    end;
  end;

end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
if SaveDialog.Execute then
      begin
      Richedit.Lines.SavetoFile(SaveDialog.Filename);
    end;
  end;


procedure TForm1.Neu1Click(Sender: TObject);
begin
Richedit.Lines.Clear;
end;

procedure TForm1.Zeile7durchtest21Click(Sender: TObject);
begin
  OpenDialog.Execute;
  Richedit2.Lines.LoadfromFile(OpenDialog.Filename);
  RichEdit.Lines.Strings[6]:= Richedit2.Lines.Text;
end;

procedure TForm1.BestimmtenSatzersetzen1Click(Sender: TObject);
begin
  OpenDialog.Execute;
  Richedit2.Lines.LoadfromFile(OpenDialog.Filename);
  RichEdit.Text := StringReplace(RichEdit.Text, 'Das Linzer Volksblatt berichtete Anfang Jänner 1894:', Richedit2.Lines.Text, [rfReplaceAll, rfIgnoreCase]);
end;

procedure TForm1.neuestring1Click(Sender: TObject);
begin

end;

procedure TForm1.Satzfindenundersetzen1Click(Sender: TObject);
begin

end;

end.

Apollonius 13. Aug 2007 12:47

Re: teil suchen aber ganzen satz ersetzen
 
Vorgehensweise:
1. mit Pos die Stelle suchen
2. das letzte und das nächste Satzschlusszeichen suchen (letzteres mit Posex; für das letzte kannst du eine eigene Routine schreiben)
3. den Satz ersetzen

Falls du etwas ganz anderes gemeint hast, solltest du die Aufgabe genauer beschreiben.

0NyX 13. Aug 2007 13:04

Re: teil suchen aber ganzen satz ersetzen
 
Zitat:

Zitat von Apollonius
Vorgehensweise:
1. mit Pos die Stelle suchen
2. das letzte und das nächste Satzschlusszeichen suchen (letzteres mit Posex; für das letzte kannst du eine eigene Routine schreiben)
3. den Satz ersetzen

Falls du etwas ganz anderes gemeint hast, solltest du die Aufgabe genauer beschreiben.

Vielen Dank für deine schnelle Antwort!
Ich glaube jedoch das es mit "Pos" nicht möglich ist, da der Nutzer selber den Text eingeben soll nach dem gesucht werden soll.

Bsp.:
Der Satz lautet:

"Das Wetter ist gut"

Der Nutzer sucht nach "Wetter" und dann wird automatisch der ganze Satz "Das Wetter ist gut" ersetzt.

Der_Unwissende 13. Aug 2007 13:09

Re: teil suchen aber ganzen satz ersetzen
 
Zitat:

Zitat von 0NyX
Ich glaube jedoch das es mit "Pos" nicht möglich ist, da der Nutzer selber den Text eingeben soll nach dem gesucht werden soll.

Hi,
worin siehst Du dort denn genau das Problem? Pos bekommt zwei Argumente übergeben, den String s1 nach dem gesucht wird und den String s2, indem gesucht wird. Die Rückgabe von Pos zeigt Dir die Stelle, wo das Wort zum ersten mal vorkommt, ist dabei < 1, wenn s1 nicht in s2 vorkommt.
Die Namen s1 und s2 sind dabei beliebig gewählt, Du kannst hier statische Strings wie 'Hallo' einsetzen, oder auch Variablen wie EditEingabe.Text verwenden.

Gruß Der Unwissende

[add]
Da gerade erst gesehen, erstmal Herzlich Willkommen in der Delphi-Praxi :dp:
[/add]

0NyX 13. Aug 2007 13:26

Re: teil suchen aber ganzen satz ersetzen
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von 0NyX
Ich glaube jedoch das es mit "Pos" nicht möglich ist, da der Nutzer selber den Text eingeben soll nach dem gesucht werden soll.

Hi,
worin siehst Du dort denn genau das Problem? Pos bekommt zwei Argumente übergeben, den String s1 nach dem gesucht wird und den String s2, indem gesucht wird. Die Rückgabe von Pos zeigt Dir die Stelle, wo das Wort zum ersten mal vorkommt, ist dabei < 1, wenn s1 nicht in s2 vorkommt.
Die Namen s1 und s2 sind dabei beliebig gewählt, Du kannst hier statische Strings wie 'Hallo' einsetzen, oder auch Variablen wie EditEingabe.Text verwenden.

Gruß Der Unwissende

[add]
Da gerade erst gesehen, erstmal Herzlich Willkommen in der Delphi-Praxi :dp:
[/add]

Vielen Dank für das Herzliche Willkommen :)

Da ich auch erst seit ca. 4 Tagen mit Delphi arbeite (vorher habe ich nur WebProgramierung gemacht PHP und JavaScript) habe ich nicht sooo die Ahnung von der Delphi Programmirung.
Ich habe mich grade mal etwas schlau gemacht aber leider nicht wirklich was brauchbares gefunden.
Danke euch aber für eure Hilfe.
Ich werde mir gleich noch mal die Grundlegenden dinge durlesen, vllt werde ich daraus was schlauer :)

0NyX 14. Aug 2007 10:03

Re: teil suchen aber ganzen satz ersetzen
 
So ich habe das nun so gemacht:

Delphi-Quellcode:
procedure TForm1.suchenClick(Sender: TObject);
begin

  OpenDialog.Execute;
  Richedit2.Lines.LoadfromFile(OpenDialog.Filename);
  RichEdit.Text := StringReplace(RichEdit.Text, search.Text, Richedit2.Lines.Text, [rfReplaceAll, rfIgnoreCase]);

end;
Nur leider ersetzt der bisher nur das, was ich auch in der suche eingebe (was ja auch logisch ist...), jedoch soll er den Kompletten Satz überschreiben.
Könnte mir jemand sagen wie ich dieses mache?

Vielen Dank im vorraus!

HLukas 14. Aug 2007 10:23

Re: teil suchen aber ganzen satz ersetzen [PLS Hilfe]
 
Die Antwort/Vorgehensweise von Apollonius ist richtig, muß aber
ergänzt werden.
(a) Zeilenumbrüche und Wortumbrüche müssen berücksichtigt werden!
(b) Mehrmaliges Vorkommen des gesuchten Wortes muss berücksichtigt werden.
Lösung: Alle Sätze zeilenweise in eine Stringlist schreiben, dabei
die Wortumbruchzeichen (z.B. Bindestrich) entfernen.
Dann nach dem Verfahren von Apollonius die Sätze nacheinander durchsuchen.
Kommt ein Wort mehrmals vor, sind die Sätze dem Nutzer zur Auswahl anzuzeigen.

0NyX 14. Aug 2007 10:35

Re: teil suchen aber ganzen satz ersetzen [PLS Hilfe]
 
Hört sich ja alles sehr einfach an, nur ich habe grade keine Ahnung wie ich es machen sollte. :-[


zu A: Ich habe WordWarp auf false gestellt in dem RichEdit Feld, damit der nicht nach einer bestimmten Anzahl an Zeichen in eine neue Zeile springt.

Zu B: Wie kann man dieses machen :-[ :wiejetzt:

(Ich bin absuluter neuling in der Delphi Programmirung... :( )

Danke aber für die schnelle Antwort! :dp:


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