Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

Sir Rufo 21. Nov 2008 09:39

Re: Komplizierte suche in Memo ! Hilfe
 
Zitat:

Zitat von Nitron
er kann es net compilieren er sagt mir das Count ein undefinierte Bezeichnung ist !
was soll ich da machen ?

... ist geändert ... jetzt geht es ... :mrgreen:

Zitat:

Zitat von Nitron
und muss dich die function einbinden ?? irgendwo oder macht das delphie automatisch ?

äh, ja ... aufrufen halt, dann wenn die aufgerufen werden soll ... als wenn ein button gedrückt wird ...
wenn die in der gleichen Unit wie die Form stehen, dann sind die sofort da, wenn die in eine eigene Unit gespeichert werden, dann diese Unit einbinden. Hängt also von Dir ab, wo du das hinschreibst.

Aber pack es doch einfach in die Unit von deiner Form ;-)

cu

Oliver

Nitron 21. Nov 2008 10:14

Re: Komplizierte suche in Memo ! Hilfe
 
ok das danke es funzt aber das problem ist jetzt das es sehr lange braucht ^^
bzw denke ich mal wenn er nichts findet dann hänngt sich das auf....
bei einer kleineren datei funzt es aber bei einer gräßeren schmiert er ab...
glaub ich eine schleife die nicht endet^^

aber mein problem ist immer noch das mit dem * es mus vor dem * was stehen alphanummerisch und eine leertaste sein
und er soll mir die zeile zeigen wo ein * ist was drin steht und eine leertaste davor z.b

far blablal u8* soll er mir nicht anzeigen
aber diesen satz soll er mir anzeigen blablabl u8* <--weil kein far drinner ist !

ich weiß nicht was man da machen kann !
wäre nett wenn ihr mir noch helfen könnt =)

mfg nitron

Nitron 21. Nov 2008 10:16

Re: Komplizierte suche in Memo ! Hilfe
 
muss auch nicht unbedingt mit edit arbeiten bzw mit edit feldern !



Delphi-Quellcode:
unit Dialog_u; { Projekt DIALOG * Herwig Reidlinger }

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;
    Edit2: TEdit;
    N2: TMenuItem;
    selectline1: TMenuItem;
    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;

  // Globale Variable oder Klassen-Variable deklarieren

  MyLastFindLine : integer;

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 SelectLine (Memo: TMemo; index: integer);
var
  i: integer;
  start, fin: integer;

begin
  start:= 0;
  fin:= length(Memo.lines[index]);
  for i:= 0 to index -1 do begin
    start:= start + length(Memo.Lines[i]) + 2;
  end;
  memo.SetFocus;
  Memo.SelStart:= start;
  Memo.SelLength:= fin;
  ShowMessage(memo.SelText);
end;

function SuchenInMemo( Memo : TMemo; FindenStr, NichtFindenStr : string; LastFindLine : integer = 0 ) : integer;
var
  LineIdx : integer;
begin
  LineIdx := LastFindLine + 1;
  Result := 0;
  while
    ( LineIdx < Memo.Lines.Count ) and
    ( Result = 0 )
  do
    begin
      if Pos( FindenStr, Memo.Lines[ LineIdx ] ) > 0
      then
        if Pos( NichtFindenStr, Memo.Lines[ LineIdx ] ) = 0
        then
          begin
            Result := LineIdx;
            SelectLine( Memo, LineIdx );
          end;
          end;
    end;



procedure TFormDialog.Suche1Click(Sender: TObject);
begin



  MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text );


end;





procedure TFormDialog.WeiterSuchen1Click(Sender: TObject);
begin


  MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text, MyLastFindLine )
end;

end.



hier noch mal mein quellcode !

HenKst 21. Nov 2008 11:17

Re: Komplizierte suche in Memo ! Hilfe
 
*auchcodeklau*
Delphi-Quellcode:
      if
        ( Pos( FindenStr, Memo.Lines[ LineIdx ] ) > 0 ) and
        ( Pos( NichtFindenStr, Memo.Lines[ LineIdx ] ) = 0 )
      then
das ist doch (fast) genau was diese Abfrage macht.
Nur sucht sie im gesamten String und nicht nur vorher.
Wenns unbedingt vorher sein soll musst du halt per copy bis pos(suchstring1) ausschneiden.

Du suchst nach "u8*"
nicht vorkommen soll "far"

Code:
Fall 1:
String= "far blablal u8*"
(Pos( "u8*", string) <> 0) = true
and
(Pos( "far", string) = 0 ) = false

durchlauf beendet;
Fall 2:
Code:
String= "blablal u8*"
(Pos( "u8*", string) <> 0) = true
string:= copy(string, 1, Pos( "u8*", string));
and
(Pos( "far", string) = 0 ) = true

markierung beginnt;

Sir Rufo 21. Nov 2008 11:30

Re: Komplizierte suche in Memo ! Hilfe
 
Zitat:

Zitat von Nitron
muss auch nicht unbedingt mit edit arbeiten bzw mit edit feldern !

dann nimm doch nicht die edit-felder :shock: und übergib die parameter direkt

hab mal deinen code geupdated

Delphi-Quellcode:
unit Dialog_u; { Projekt DIALOG * Herwig Reidlinger }

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;
    Edit2: TEdit;
    N2: TMenuItem;
    selectline1: TMenuItem;
    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;

  // Globale Variable oder Klassen-Variable deklarieren

  MyLastFindLine : integer;

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 SelectLine (Memo: TMemo; index: integer);
var
  i: integer;
  start, fin: integer;

begin
  start:= 0;
  fin:= length(Memo.lines[index]);
  for i:= 0 to index -1 do begin
    start:= start + length(Memo.Lines[i]) + 2;
  end;
  memo.SetFocus;
  Memo.SelStart:= start;
  Memo.SelLength:= fin;
  ShowMessage(memo.SelText);
end;

function SuchenInMemo( Memo : TMemo; FindenStr, NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var
  LineIdx : integer;
begin
  LineIdx := LastFindLine + 1;
  Result := 0;
  while
    ( LineIdx < Memo.Lines.Count ) and
    ( Result = 0 )
  do
    begin
      if
        ( Pos( FindenStr, Memo.Lines[ LineIdx ] ) > 0 ) and
        ( Pos( NichtFindenStr, Memo.Lines[ LineIdx ] ) = 0 )
      then
        begin
          Result := LineIdx;
          SelectLine( Memo, LineIdx );
        end
      else
        Inc( LineIdx );
    end;
end;


procedure TFormDialog.Suche1Click(Sender: TObject);
begin


  // Wenn Du die Edit-Felder nicht willst, dann schreib es doch einfach da rein

  // MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text );

  MyLastFindLine := SuchenInMemo( Memo1, '*', 'far' );

end;





procedure TFormDialog.WeiterSuchen1Click(Sender: TObject);
begin

  // Wenn Du die Edit-Felder nicht willst, dann schreib es doch einfach da rein

  // MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text, MyLastFindLine )

  MyLastFindLine := SuchenInMemo( Memo1, '*', 'far', MyLastFindLine )
end;

end.

Nitron 21. Nov 2008 11:38

Re: Komplizierte suche in Memo ! Hilfe
 
ja aber das problem ist das da auch stehen kann u9* nicht unbedingt u8

es kann alles mögliche sein vor dem * und es muss eine leertaste davor sein

so : irgendwas|leer|irgendwas*
so irgendwas irgendwas*

wenn z.b das * alleine steht oder so ****** ohne das was direkt davor steht will ich das nicht angezeigt haben !

habt ihr mich verstanden ? ^^
das ist sehr wichtig das dass so ist !

HenKst 21. Nov 2008 11:55

Re: Komplizierte suche in Memo ! Hilfe
 
-.-
Also du willst quasi eine wildcard suche.
Das ist aber nicht ganz einfach weil eine wildcard nunmal für alles stehn kann.
Ein paar Einschränkungen wären ganz praktisch.

Wenn zum beispiel nur "u0".."u9" vor dem "*" stehn dürfte wär das relativ einfach zu lösen.
Aber "alles mögliche" ist verdammt viel.

Nitron 21. Nov 2008 11:56

Re: Komplizierte suche in Memo ! Hilfe
 
gibt es dafür kein befehl bzw code für alles mögliche?

HenKst 21. Nov 2008 12:04

Re: Komplizierte suche in Memo ! Hilfe
 
Da brauchst du ja eigentlich keinen code für.
Du musst ja nur den "*" suchen und schaun ob er alleine steht oder das nächste zeichen auch ein "*" ist.
Dann findest du alles was "*" endet.
Du könntest auch Delimited text mit "*" als delimter aufrufen.
Dann hättest du eine stringlist in der in jeder zeile ein string steht der mit "*" endete.

Das Problem ist halt das da tatsächlich alles mögliche stehen kann.
Ich kann mir nicht vorstellen das das wirklich ist was du willst.

Oder wäre "lkjgfgkdsfhgkshrbtz afkgjbhertb*" ein erlaubter string?

Nitron 21. Nov 2008 12:09

Re: Komplizierte suche in Memo ! Hilfe
 
also beispiele was erlaubt ist ! (LABEL ist ein Bespiel)

Label * ->soll er mir anzeigen weil es hier kein FAR gibt !
also mache ich selber eine korektur im Programm
Far Label *
OK! Das soll er mir nicht mehr anzeigen da jetzt Far da ist !

Das gleiche gilt bei x* soll er mir anzeigen ich verbessere das selber
far x*
okay jetz springt er weiter

steht da jetzt dfghjkl* soll er mir das anzeigen weil far fehlt ich mache wieder eine korektur
far dfghjkl*

steht da
d * soll er mir das auch anzeigen ich mach korrektur
far d *

steh da aber jetzt

pa_p* soll er mir das auch anzeigen ich mach korrektur
far pa_p*

steht da aber jetzt /* dann soll er mir das net anzeigen oder }/* oder so.......


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr.
Seite 3 von 5     123 45      

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