Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komplizierte suche in Memo ! Hilfe (https://www.delphipraxis.net/124304-komplizierte-suche-memo-hilfe.html)

Nitron 18. Nov 2008 12:40


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:
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.
------------------------------------
Ich will aber das er mit die Zeilen makiert in der Irgendwas* und in der gleichen zeile kein Far steht

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

HenKst 18. Nov 2008 12:58

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:
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;
suchtext1 ist der Text der gefunden werden soll, suchtext2 der Text der nicht vorhanden sein soll.
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

Nitron 18. Nov 2008 13:01

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 !

Nitron 18. Nov 2008 13:04

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?

HenKst 18. Nov 2008 13:08

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*

alzaimar 18. Nov 2008 13:30

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]);

Nitron 18. Nov 2008 13:31

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

HenKst 18. Nov 2008 13:41

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:

Zitat von alzaimar
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]);

Das ignoriert aber den zweiten suchtext
Es soll ja nur irgendwas getan werden wenn dieser in der Zeile nicht vorhanden ist.

Nitron 18. Nov 2008 13:44

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.

alzaimar 18. Nov 2008 13:47

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 07:00 Uhr.
Seite 1 von 5  1 23     Letzte »    

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