![]() |
Suche
Hi
wie suche ich am besten in einem String nach einem anderen Teilstring? ich will nur wissen ob der Teilstring (oder auch variationen davon) in dem String enthalten ist. Beispiel: Ich suche nach: "Das Haus" Dabei soll ein positiver Fund erfolgen wenn ich in dem String "Das Haus ist schön" oder "Das runde Haus" oder "bla dashausblabla" oder "Haus das" suche. Hat jemand ne Ahnung wie ich das am besten machen? mfg.dominik |
Re: Suche
Du schaust ob das Ergebniss von 'pos' größer als -1 ist. (Siehe OH)
Also etwa if (pos(uppercase(das),uppercase('DAS Haus ist schoen'))>-1)then showmessage('hallo'); |
Re: Suche
Du zerlegst den Suchstring mit ' ' als Delimmiter in die einzelnen Worte und suchst mit Pos jeweils ob es drin vorkommt.
So, ich muss los, Anzug für Delphi-Tage kaufen :mrgreen: |
Re: Suche
Delphi-Quellcode:
const
Delimiters = [#1..#47, #58..#64, #91..#96, #123..#191, #215, #216, #247, #248]; Delimiters_0 = [#0] + Delimiters; procedure GetWords(s: string; woerter: TStrings); var p, r: pchar; Token: string; begin woerter.Clear; p := pchar(s); repeat r := p; while not (p^ in Delimiters_0) do inc(p); SetString(Token, r, p - r); if Token <> '' then woerter.Add(Token); while p^ in Delimiters do inc(p); until p^ = #0; end; function such(Txt, Pattern: string): boolean; var slP: TStringlist; x: integer; pt: PChar; p: array of PChar; i: array of integer; b: array of boolean; begin if (Txt = '') or (Pattern = '') then begin result := false; exit; end; Txt := ansiuppercase(Txt); Pattern := ansiuppercase(Pattern); slP := TStringlist.Create; GetWords(Pattern, slP); setlength(p, slP.count); setlength(i, slP.count); setlength(b, slP.count); for x := 0 to slP.count - 1 do begin p[x] := @slP[x][1]; i[x] := length(slP[x]); b[x] := false; end; pt := @Txt[1]; while pt^ <> #0 do begin for x := 0 to high(p) do if comparemem(pt, p[x], i[x]) then b[x] := true; inc(pt); result := true; for x := 0 to high(b) do result := result and b[x]; if result then break; end; b := nil; i := nil; p := nil; slP.free; end; procedure TForm1.Button4Click(Sender: TObject); var suchtext: string; begin suchtext := 'Das Haus'; if such('Ein schönes Haus, das ist klar.', suchtext) then showmessage('"' + suchtext + '" ist vorhanden') else showmessage('"' + suchtext + '" ist nicht vorhanden'); end; |
Re: Suche
Zitat:
Verwirrte Grüsse Thorsten |
Re: Suche
Doch ist es. Es muss > 0 heißen ;)
|
Re: Suche
pos gibt nie -1 zurück, wenn der gesuchte String nicht vorkommt erhält man 0!
Gruß |
Re: Suche
|
Re: Suche
danke an alle... ihr habt mir sehr geholfen :mrgreen:
besonderen dank an DBR |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz