![]() |
Komplizierte suche in Memo ! Hilfe
Hallo bin Neu hier und komme auch direkt zu meinem erstem Problem !
Ich muss eine Datei Programmieren in Delphi die eine Text datei öffnet und nach bestimmten Zeilen sucht. Der Aufbau sieht so aus:
Code:
Ich will aber das er mit die Zeilen makiert in der Irgendwas* und in der gleichen zeile kein Far steht
unit Dialog_u;
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TFormDialog = class(TForm) Memo1: TMemo; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; MainMenu: TMainMenu; Menu_Datei: TMenuItem; MenuLaden: TMenuItem; MenuSpeichern: TMenuItem; N1: TMenuItem; MenuBeenden: TMenuItem; Suche1: TMenuItem; WeiterSuchen1: TMenuItem; Edit1: TEdit; CheckBox1: TCheckBox; procedure MenuLadenClick(Sender: TObject); procedure MenuSpeichernClick(Sender: TObject); procedure MenuBeendenClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure Suche1Click(Sender: TObject); procedure WeiterSuchen1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var FormDialog: TFormDialog; x: Integer; find: Boolean = False; implementation {$R *.DFM} procedure TFormDialog.MenuLadenClick(Sender: TObject); begin if OpenDialog.Execute then TRY Memo1.Lines.Loadfromfile(OpenDialog.Filename); EXCEPT ShowMessage ('Fehler beim Laden der Datei!'); END; end; procedure TFormDialog.MenuSpeichernClick(Sender: TObject); begin if SaveDialog.Execute then TRY Memo1.Lines.SavetoFile(SaveDialog.Filename); EXCEPT ShowMessage ('Fehler beim Speichern der Datei!'); END; end; procedure TFormDialog.MenuBeendenClick(Sender: TObject); begin FormDialog.Close; end; procedure TFormDialog.FormResize(Sender: TObject); begin Memo1.width := FormDialog.clientwidth; Memo1.height := FormDialog.clientheight; end; procedure TFormDialog.Suche1Click(Sender: TObject); var i: Integer; a: string; begin Memo1.Lines.Add(''); Memo1.Lines.Text := ' ' + Memo1.Lines.Text; for i := 0 to Length(Memo1.Lines.Text) - Length(edit1.Text) do begin a := Copy(Memo1.Lines.Text, i, Length(edit1.Text)); if CheckBox1.Checked = True then begin if a = edit1.Text then begin find := True; x := 2; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); Memo1.SetFocus; Memo1.SelStart := i - 2; Memo1.SelLength := Length(edit1.Text); break; end; end else begin if lowercase(a) = lowercase(edit1.Text) then begin Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); find := True; x := 2; Memo1.SetFocus; Memo1.SelStart := i - 2; Memo1.SelLength := Length(edit1.Text); break; end; end; end; if find = False then ShowMessage('SuchString nicht gefunden') else find := False; end; procedure TFormDialog.WeiterSuchen1Click(Sender: TObject); var i: Integer; a: string; d: Integer; begin d := 0; for i := 0 to Length(Memo1.Lines.Text) - Length(edit1.Text) do begin a := Copy(Memo1.Lines.Text, i, Length(edit1.Text)); if CheckBox1.Checked = True then begin if a = edit1.Text then begin d := d + 1; if d = x then begin find := True; x := x + 1; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); Memo1.SetFocus; Memo1.SelStart := i - 1; Memo1.SelLength := Length(edit1.Text); break; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); end; end; end else begin if lowercase(a) = lowercase(edit1.Text) then begin d := d + 1; if d = x then begin find := True; x := x + 1; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); Memo1.SetFocus; Memo1.SelStart := i - 1; Memo1.SelLength := Length(edit1.Text); break; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); end; end; end; end; if find = False then ShowMessage('SuchString nicht gefunden') else find := False; end; end. ------------------------------------ z.b far u8* buf_p; soll er nicht in der suche anzeigen und makieren aber wenn das auftaucht: u8* buf_p soll er mir das makieren da kein far in der Zeile ist ! Kann mir da einer helfen ? Und noch was das u8 ist ein beispiel für irgendwas ! Mfg Nitosox |
Re: Komplizierte suche in Memo ! Hilfe
Hallöle und willkommen in der DP (das wollt ich schon immer mal sagen ;) )
Hast dus schonmal mit pos() probiert? So nach dem schema
Delphi-Quellcode:
suchtext1 ist der Text der gefunden werden soll, suchtext2 der Text der nicht vorhanden sein soll.
for i:= 0 to memo1.lines.count do -1 begin
if pos(suchtext1, memo1.lines[i]) <> 0 then begin if pos(suchtext2, memo1.lines[i]) <> 0 then begin find = false; end else begin find = true; end; end else begin find:= false; end; end; pos() gibt 0 zurück wenn der Gesuchte text nicht gefunden wurde. Wenn diese Schleife also den ersten suchtext findet, sucht sie in der selbe Zeile nach dem zweiten. Wenn der drin ist wird find:= true, wenn nicht := false gesetzt. Funktioniert allerdings nur wenn der text auch nach zeilen sortiert ist, also pro Zeile ein zu durchsuchender string. Wenn der das nicht ist soltest du dir mal die DelimitedText methode anschaun. GreeZ HenKst |
Re: Komplizierte suche in Memo ! Hilfe
Danke ich werde mich damit beschäftigen !
Ehm es ist sortiert da es ein C++ Quellcode ist ! Die kann ich ja öffnen und im Memo ausgeben ! Aber vielen DANK ! |
Re: Komplizierte suche in Memo ! Hilfe
Delphi-Quellcode:
for i:= 0 to memo1.lines.count do begin
if pos(suchtext1, memo1.lines[i] <> 0 then begin if pos(suchtext2, memo1.lines[i] <> 0 then begin find = false; end else begin find = true; end; end else begin find:= false; end; end; bei such text kommt z.b edit1 rein oder ? und die var i soll strin sein oder? |
Re: Komplizierte suche in Memo ! Hilfe
Quellcode ist auch nicht immer sortiert ;)
Aber bei c++ ist soweit ich weiss auch jeder Befehl mit ; geschlossen also hast du da zur not nen 1A delimiter. Bei suchtext1 kommt rein wonach du suchst. Wenn das in edit1.text steht muss das dahin ;) i ist als schleifenindex wohl ein integer^^ die schleife muss übrigens bis memo1.lines.count -1 gehn *korrigier* |
Re: Komplizierte suche in Memo ! Hilfe
Ein wenig kürzer wäre:
Delphi-Quellcode:
// Beachte Groß/Kleinschreibung:
Memo1.lines.Text := StringReplace (Memo1.Lines.Text, SuchText, ErsetzeText,[rfReplaceAll]); // Ignoriere Groß/Kleinschreibung: Memo1.lines.Text := StringReplace (Memo1.Lines.Text, SuchText, ErsetzeText,[rfReplaceAll, rfIgnoreCase]); |
Re: Komplizierte suche in Memo ! Hilfe
Delphi-Quellcode:
procedure TFormDialog.Suche1Click(Sender: TObject);
var i: Integer; a: string; begin Memo1.Lines.Add(''); Memo1.Lines.Text := ' ' + Memo1.Lines.Text; for i:= 0 to memo1.lines.count-1 do begin if pos(edit1.text, memo1.lines[i] <> 0 then begin if pos(edit2.text, memo1.lines[i] <> 0 then begin find = false; end else begin find = true; end; end else begin find:= false; end; end; end; hier zeigt er mir ein fehler wegen den variablen |
Re: Komplizierte suche in Memo ! Hilfe
Was mir auffällt ist das find nicht deklariert ist.
Die hab ich einfach aus deinem Code oben übernommen also musst du die auch noch irgendwo herholen ;) Zitat:
Es soll ja nur irgendwas getan werden wenn dieser in der Zeile nicht vorhanden ist. |
Re: Komplizierte suche in Memo ! Hilfe
ich habe absolut 0plan sorry du musst mir mal rictig helfen hier mit dem prog ich wäre dir sehr dankbar also hier jetzt mein quellcode
Delphi-Quellcode:
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TFormDialog = class(TForm) Memo1: TMemo; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; MainMenu: TMainMenu; Menu_Datei: TMenuItem; MenuLaden: TMenuItem; MenuSpeichern: TMenuItem; N1: TMenuItem; MenuBeenden: TMenuItem; Suche1: TMenuItem; WeiterSuchen1: TMenuItem; CheckBox1: TCheckBox; Edit1: TEdit; Edit2: TEdit; procedure MenuLadenClick(Sender: TObject); procedure MenuSpeichernClick(Sender: TObject); procedure MenuBeendenClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure Suche1Click(Sender: TObject); procedure WeiterSuchen1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var FormDialog: TFormDialog; x: Integer; find: Boolean = False; implementation {$R *.DFM} procedure TFormDialog.MenuLadenClick(Sender: TObject); begin if OpenDialog.Execute then TRY Memo1.Lines.Loadfromfile(OpenDialog.Filename); EXCEPT ShowMessage ('Fehler beim Laden der Datei!'); END; end; procedure TFormDialog.MenuSpeichernClick(Sender: TObject); begin if SaveDialog.Execute then TRY Memo1.Lines.SavetoFile(SaveDialog.Filename); EXCEPT ShowMessage ('Fehler beim Speichern der Datei!'); END; end; procedure TFormDialog.MenuBeendenClick(Sender: TObject); begin FormDialog.Close; end; procedure TFormDialog.FormResize(Sender: TObject); begin Memo1.width := FormDialog.clientwidth; Memo1.height := FormDialog.clientheight; end; procedure TFormDialog.Suche1Click(Sender: TObject); var i: Integer; a: string; begin Memo1.Lines.Text := ' ' + Memo1.Lines.Text; for i:= 0 to memo1.lines.count-1 do begin if pos(edit1.text, memo1.lines[i] <> 0 then begin if pos(edit2.text, memo1.lines[i] <> 0 then begin find = false; end else begin find = true; end; end else begin find:= false; end; end; end; procedure TFormDialog.WeiterSuchen1Click(Sender: TObject); var i: Integer; a: string; d: Integer; begin d := 0; for i := 0 to Length(Memo1.Lines.Text) - Length(edit1.Text) do begin a := Copy(Memo1.Lines.Text, i, Length(edit1.Text)); if CheckBox1.Checked = True then begin if a = edit1.Text then begin d := d + 1; if d = x then begin find := True; x := x + 1; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); Memo1.SetFocus; Memo1.SelStart := i - 1; Memo1.SelLength := Length(edit1.Text); break; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); end; end; end else begin if lowercase(a) = lowercase(edit1.Text) then begin d := d + 1; if d = x then begin find := True; x := x + 1; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); Memo1.SetFocus; Memo1.SelStart := i - 1; Memo1.SelLength := Length(edit1.Text); break; Memo1.Lines.Text := Copy(Memo1.Lines.Text, 2, Length(Memo1.Lines.Text) - 1); end; end; end; end; if find = False then ShowMessage('SuchString nicht gefunden') else find := False; end; end. |
Re: Komplizierte suche in Memo ! Hilfe
Hups, hab ich nicht geschaut:
Delphi-Quellcode:
For i:=0 to Memo1.lines.count - 1 do
If Pos(DerEineSuchtext, Memo1.Lines[i]) = 0 Then // wenn der eine Suchtext in der Zeile nicht vorhanden ist Memo1.Lines[i] := StringReplace (Memo1.Lines[i], Suchtext, ErsetzungsText,...); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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