![]() |
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. |
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. |
Re: teil suchen aber ganzen satz ersetzen
Zitat:
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. |
Re: teil suchen aber ganzen satz ersetzen
Zitat:
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] |
Re: teil suchen aber ganzen satz ersetzen
Zitat:
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 :) |
Re: teil suchen aber ganzen satz ersetzen
So ich habe das nun so gemacht:
Delphi-Quellcode:
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.
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; Könnte mir jemand sagen wie ich dieses mache? Vielen Dank im vorraus! |
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. |
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 22:47 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