Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suchfunktion verbessern (https://www.delphipraxis.net/84090-suchfunktion-verbessern.html)

ghost1601 11. Jan 2007 09:02


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:
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;
wenn jemand ne idee hat wie ich das bewältigen könnte wäre ich sehr dankbar :wink:

sirius 11. Jan 2007 09:24

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.

freak4fun 11. Jan 2007 09:28

Re: Suchfunktion verbessern
 
Wieso machst du hier nicht weiter?

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

marabu 11. Jan 2007 09:32

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:
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;
Getippt und nicht getestet.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz