AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komplizierte suche in Memo ! Hilfe

Offene Frage von "Nitron"
Ein Thema von Nitron · begonnen am 18. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Nitron

Registriert seit: 4. Nov 2008
25 Beiträge
 
#1

Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 12:40
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
Mim Kopf durch die Wand ^^
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#2

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 12:58
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
narf - not a real function
  Mit Zitat antworten Zitat
Nitron

Registriert seit: 4. Nov 2008
25 Beiträge
 
#3

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:01
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 !
Mim Kopf durch die Wand ^^
  Mit Zitat antworten Zitat
Nitron

Registriert seit: 4. Nov 2008
25 Beiträge
 
#4

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:04
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?
Mim Kopf durch die Wand ^^
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#5

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:08
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*
narf - not a real function
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:30
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]);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Nitron

Registriert seit: 4. Nov 2008
25 Beiträge
 
#7

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:31
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
Mim Kopf durch die Wand ^^
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#8

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:41
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 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.
narf - not a real function
  Mit Zitat antworten Zitat
Nitron

Registriert seit: 4. Nov 2008
25 Beiträge
 
#9

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:44
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.
Mim Kopf durch die Wand ^^
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Komplizierte suche in Memo ! Hilfe

  Alt 18. Nov 2008, 13:47
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,...);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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