![]() |
Re: Komplizierte suche in Memo ! Hilfe
Zitat:
Zitat:
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 |
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 |
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 ! |
Re: Komplizierte suche in Memo ! Hilfe
*auchcodeklau*
Delphi-Quellcode:
das ist doch (fast) genau was diese Abfrage macht.
if
( Pos( FindenStr, Memo.Lines[ LineIdx ] ) > 0 ) and ( Pos( NichtFindenStr, Memo.Lines[ LineIdx ] ) = 0 ) then 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 2:
Fall 1:
String= "far blablal u8*" (Pos( "u8*", string) <> 0) = true and (Pos( "far", string) = 0 ) = false durchlauf beendet;
Code:
String= "blablal u8*"
(Pos( "u8*", string) <> 0) = true string:= copy(string, 1, Pos( "u8*", string)); and (Pos( "far", string) = 0 ) = true markierung beginnt; |
Re: Komplizierte suche in Memo ! Hilfe
Zitat:
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. |
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 ! |
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. |
Re: Komplizierte suche in Memo ! Hilfe
gibt es dafür kein befehl bzw code für alles mögliche?
|
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? |
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. |
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