![]() |
Re: Komplizierte suche in Memo ! Hilfe
Oder wäre "lkjgfgkdsfhgkshrbtz afkgjbhertb*" ein erlaubter string?[/quote]
soll er mir nicht anzeigen da vor afkgjbhertb* noch ein wort ist ! würde alleine stehen etwa so afkgjbhertb* dann soll er mir das anzeigen ! |
Re: Komplizierte suche in Memo ! Hilfe
na dann...
mit pos:
Delphi-Quellcode:
mit delimitedtext (find ich schöner^^)
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var LineIdx : integer; str: string; p: integer; begin LineIdx := LastFindLine + 1; Result := 0; while ( LineIdx < Memo.Lines.Count ) and ( Result = 0 ) do begin str:= Memo.Lines[LineIdx]; p:= Pos( '*', str);// '*' finden; if (p > 0 ) and // '*' gefunden? (Pos( NichtFindenStr, str ) = 0 ) and // NichtFindStr nicht gefunden? (str[p+1] <> '*') and//'*' steht alleine? (pos(' ', str) > 1)// kein leerzeichen nach dem ersten zeichen then begin Result := LineIdx; SelectLine( Memo, LineIdx ); end else Inc( LineIdx ); end; end;
Delphi-Quellcode:
Das sollte erstmal alles finden.
function SuchenInMemo( Memo : TMemo; NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var LineIdx : integer; i: integer; strlst: TStringList; p: integer; begin strlst:= TStringList.Create; strlst.delimiter:= '*'; strlst.strictdelimiter:= true; LineIdx := LastFindLine + 1; Result := 0; while ( LineIdx < Memo.Lines.Count ) and ( Result = 0 ) do begin if pos('*', Memo.Lines[LineIdx]) = 0 then inc(LineIdx); continue; //wenn kein '*' gefunden: nächster schleifendurchlauf; end; strlst.delimitedtext:= Memo.Lines[LineIdx]; // alle '*' finden; //jede zeile der strlst ist das was im memo vor einem '*' steht; case strlst.count of 1: begin //ein '*' gefunden if pos(NichtFindenStr, strlst[0]) = 0 then begin //nichtfindstr suchen if pos(' ',strlst[0]) > 1 then begin //kein leerzeichen nach dem ersten zeichen Result := LineIdx; SelectLine( Memo, LineIdx ); end; end; end; else begin if strlst[1] <> '' then begin // abragen ob '*' alleine stand // mehrere '**' sollte leerzeilen erzeugen *hoff*^^ Result := LineIdx; SelectLine( Memo, LineIdx ); end; end; Inc( LineIdx ); end; end; Für ausnahmen musst du dir wohl einen array von strings machen die nicht vor '*' stehen dürfen. |
Re: Komplizierte suche in Memo ! Hilfe
dankeschön aber einige fehler gefunden er sagt mir bei
p: pos; das was nicht stimmt und zwar : ,(, erwartet aber ,;, gefunden |
Re: Komplizierte suche in Memo ! Hilfe
ups^^, p: integer hätte das heissen sollen ;)
Der code ist übrigens nicht getestet weil ich grad garkein Delphi da hab. Benutzung also auf eigene Gefahr :twisted: |
Re: Komplizierte suche in Memo ! Hilfe
hier sagt er mir das ich ein simikolon vergessen habe aber das kann nicht sein
(str[p+1] <> '*')//'*' steht alleine? |
Re: Komplizierte suche in Memo ! Hilfe
(str[p+1] <> '*') AND//'*' steht alleine?
muss da hin ;) |
Re: Komplizierte suche in Memo ! Hilfe
okay lässt sich nicht ausführen wegen dem hier
Delphi-Quellcode:
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; muss ich da die quellen ändern ? die edit´s müssen weg oder? da wir jetzt direkt ansprechen oder? |
Re: Komplizierte suche in Memo ! Hilfe
hap
ich hab als Suchstring jetzt permanent '*' angenommen, der wird also nicht mehr übergeben.
Delphi-Quellcode:
müsste also reichen
MyLastFindLine := SuchenInMemo( Memo1, Edit2.Text, MyLastFindLine )
|
Re: Komplizierte suche in Memo ! Hilfe
wollte mich mal bedanke für die hilfe !
jetzt ist aber das problem immer noch da das wenn was findet mit * z.b hier ein bespiel: void REPSLCT(func_return_t* rep_select) findet eine bedienung soll ja sein das nix davor stehen darf ! also wenn das steht func_return_t* dann soll er mir das anzeigen aber nich wenn davor was steht und manchmal bleibt er bei einem stehen ! zb ich click auf weiter suche und er zeigt mir das zb an void REPSLCT(func_return_t* rep_select) und geht nicht weiter ! quell code nochmal
Delphi-Quellcode:
procedure TFormDialog.Suche1Click(Sender: TObject);
begin MyLastFindLine := SuchenInMemo( Memo1, Edit2.Text, MyLastFindLine ) end; procedure TFormDialog.WeiterSuchen1Click(Sender: TObject); begin MyLastFindLine := SuchenInMemo( Memo1, Edit2.Text, MyLastFindLine ) end; |
Re: Komplizierte suche in Memo ! Hilfe
Zitat:
in dem fall wäre das mit
Delphi-Quellcode:
vermutlich gelöst, aber es gibt bestimmt noch mehr solcher fälle
if (pos('/', str) > 0) and (pos('/', str) < pos('*', str))
also bauen wir uns ne funktion ;)
Delphi-Quellcode:
der übergibst du deinen ausnahmen array und die memozeile
function AusnahmenFinden(arr: array of string; value: string): boolean;
var i: integer; begin result:= false; for i:= 0 to high(arr) do begin if pos(arr[i], value) <> 0 then begin result:= true; exit; end; end; end; und dann baust du sie in die if abfrage ein
Delphi-Quellcode:
if
(p > 0 ) and // '*' gefunden? (Pos( NichtFindenStr, str ) = 0 ) and // NichtFindStr nicht gefunden? (str[p+1] <> '*') and//'*' steht alleine? (pos(' ', str) > 1) and// kein leerzeichen nach dem ersten zeichen (not AusnahmenFinden(Ausnahmenarray, str)) then Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 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