Avatar billede athlon-pascal Juniormester
19. november 2002 - 17:29 Der er 6 kommentarer og
1 løsning

Jokersøgning

I forbindelse med en søgefunktion har jeg brug for en mulighed for at bruge jokere (*) i mit program.

Hvis jeg f.eks søger efter 'Ek*er*', så skal den vise 'Eksperten', søger jeg derimod efter 'X*er*' skal den ikke vise noget.

Det skal bare være noget ala det:
function IdenticalStr(JokerStr, Str: String): Boolean;


IdenticalStr('Ek*er*', 'Eksperten') = true;
IdenticalStr('X*er*', 'Eksperten') = false;
Avatar billede erikjacobsen Ekspert
19. november 2002 - 17:38 #1
Du bør kigge på regulære udtryk. Er de ikke i din Delphi,
kan du få indtil flere gratis komponenter, fx:

http://www.latiumsoftware.com/en/articles/00009.php3
Avatar billede zimp Nybegynder
20. november 2002 - 11:53 #2
Du kan bruge denne:

unit Wildcard;

interface

uses
  SysUtils;

function WildcardMatch(const source, pattern: String): Boolean;
function WildcardMatchIC(const source, pattern: String): Boolean;
function WildcardMatchEx(const source, pattern: String; const ic: Boolean): Boolean;

implementation

function WildcardMatchEx(const source, pattern: String; const ic: Boolean): Boolean;
begin
  { perform a wildcard match, either case-sensitive or case-insensitive,
    depending on the ic flag. }
  if ic = True then
    result := WildcardMatchIC(source, pattern)
  else
    result := WildcardMatch(source, pattern);
end;

function WildcardMatchIC(const source, pattern: String): Boolean;
begin
  { perform a case insensitive wildcard match by converting the pattern
    and source strings to uppercase. }
  result := WildcardMatch(UpperCase(source), UpperCase(pattern));
end;

function WildcardMatch(const source, pattern: String): Boolean;
var
  pSource: Array [0..255] of Char;
  pPattern: Array [0..255] of Char;

  function MatchPattern(element, pattern: PChar): Boolean;

    function IsPatternWild(pattern: PChar): Boolean;
    begin
      Result := StrScan(pattern,'*') <> nil;
      if not Result then Result := StrScan(pattern,'?') <> nil;
    end;

  begin
    if 0 = StrComp(pattern,'*') then
      Result := True
    else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
      Result := False
    else if element^ = Chr(0) then
      Result := True
    else begin
      case pattern^ of
      '*': if MatchPattern(element,@pattern[1]) then
            Result := True
          else
            Result := MatchPattern(@element[1],pattern);
      '?': Result := MatchPattern(@element[1],@pattern[1]);

      else
        if element^ = pattern^ then
          Result := MatchPattern(@element[1],@pattern[1])
        else
          Result := False;
      end;
    end;
  end;

begin
  StrPCopy(pSource,source);
  StrPCopy(pPattern,pattern);
  Result := MatchPattern(pSource,pPattern);
end;

end.
Avatar billede martinlind Nybegynder
20. november 2002 - 13:00 #3
Kan du ikke bruge delphi's egen funtion :

function MatchesMask(const Filename, Mask: string): Boolean;

/Martin
Avatar billede athlon-pascal Juniormester
22. november 2002 - 20:28 #4
zimp -> Kast et svar :)

martinlind -> Bruger Delphi 4 Standard. Fra hjælpen:
"Note

MatchesMask is only available in the Client/Server edition."
Avatar billede martinlind Nybegynder
22. november 2002 - 21:26 #5
:(
Avatar billede athlon-pascal Juniormester
26. november 2002 - 11:19 #6
Zimp ... Vil du ikke ha' points ..?
Avatar billede zimp Nybegynder
26. november 2002 - 11:48 #7
Ups sorry, jeg glemte det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester