![]() |
Suchfunktion verbessern
hi,
ich habe mir eine suchfunktion zusammengebastelt mit der ich ein array durchsuchen kann. nun habe ich jeodch das problem, wenn man nicht einen exakten suchbegriff eingibt wird das gesamte array zerhaun und auch kein richtiges suchergebnis ausgegeben. es wäre von daher ganz praktisch wenn man die suchfunktion so gestallten könnte, dass sie auch bei einer eingabe von nur einen buchstaben ein ergebnis zu tage fördert. hier mal die jetzige funktion:
Delphi-Quellcode:
wenn jemand ne idee hat wie ich das bewältigen könnte wäre ich sehr dankbar :wink:
function TForm1.Suche(const sucheNach : string): LongInt;
var i:integer; begin for i:= 1 to max do begin if datenfeld[i].kontaktname = SucheNach then begin result:=i; exit; end; end; end; |
Re: Suchfunktion verbessern
1. Du kannst mit "lowercase" bzw. "uppercase" arbeiten, damit due Groß- und Kleinschreibung nicht beachtest und dann gibt es den Befehl "pos", der einen substr innerhalb eines Strings sucht.
|
Re: Suchfunktion verbessern
Wieso machst du
![]() Ich würde statt Exit; Break; verwenden und als Result -1 zurückgeben, um zu zeigen, das es kein Suchergebnis gibt. Eine unspezifischere Suche, zB mit Wildcards, wird aufwändiger. Da kann ich dir aber leider nicht bei helfen. :( Da gibts hier andere Spezalisten für. ;) MfG freak |
Re: Suchfunktion verbessern
Hi,
ich habe den von Christian verlinkten thread nicht gelesen, aber zu deiner Suchfunktion: Ich würde die zu einer eigenständigen Funktion machen und nicht zu einer Methode:
Delphi-Quellcode:
Getippt und nicht getestet.
type
KontaktRec = record Nachname: String; Vorname: String; end; var Kontakte: array of KontaktRec; uses StrUtils; function Suche(const Kontakte: array of KontaktRec; const Feld, Zeichenkette: String): Integer; var found: Boolean; begin Result := High(Kontakte); while Result >= 0 do begin case AnsiIndexText(Feld, ['NachName', 'Vorname']) of 0: found := AnsiContainsText(Kontakte[Result].Nachname, ZeichenKette); 1: found := AnsiContainsText(Kontakte[Result].Vorname, ZeichenKette); else found := False; end; if found then Exit else Dec(Result); end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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