home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 14 / tools / wildcard.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-03-28  |  2.3 KB  |  87 lines

  1. (* ------------------------------------------------- *)
  2. (*                WILDCARD.PAS                       *)
  3. {$D+}
  4. PROGRAM Wildcard_Demo;
  5.  
  6. TYPE strmax=string[255];
  7.  
  8. VAR eingmaske,eingvergl :strmax;
  9.  
  10.  
  11. FUNCTION InStr(quell,such :strmax; p :byte) :byte;
  12.  
  13. VAR str :strmax;
  14.  
  15. BEGIN
  16.   str:=copy(quell,p,length(quell)-p+1);
  17.   InStr:=pos(such,str)+p-1;
  18. END;
  19.  
  20.  
  21. FUNCTION Wildcard(maske,verglstr :strmax;
  22.                            jo1,jo2 :char) :boolean;
  23.  
  24. VAR maskepos,verglpos,p :integer;
  25.     ch :char;
  26.     str :strmax;
  27.     gleich,flex :boolean;
  28.  
  29. BEGIN
  30.   maskepos:=1;
  31.   verglpos:=1;
  32.   gleich:=true;
  33.   flex:=false;
  34.   WHILE (gleich=true) and
  35.         (maskepos<=length(maske)) DO BEGIN
  36.     ch:=maske[maskepos];
  37.     IF ch=jo1 THEN flex:=true;
  38.     IF ch=jo2 THEN verglpos:=verglpos+1;
  39.     IF not (ch in [jo1,jo2]) THEN
  40.       IF flex=true THEN BEGIN
  41.         str:=maske[maskepos];
  42.         WHILE (not (maske[maskepos+1] in [jo1,jo2]))
  43.               and (maskepos<length(maske)) DO BEGIN
  44.           maskepos:=maskepos+1;
  45.           str:=str+maske[maskepos];
  46.         END;
  47.         p:=InStr(verglstr,str,verglpos);
  48.         IF p>0 THEN verglpos:=p+length(str)
  49.         ELSE gleich:=false;
  50.         flex:=false; END
  51.       ELSE
  52.         IF verglstr[verglpos]=ch THEN
  53.           verglpos:=verglpos+1
  54.         ELSE gleich:=false;
  55.         maskepos:=maskepos+1;
  56.         IF (verglpos>length(verglstr))
  57.            and (maskepos<=length(maske)) THEN
  58.           IF (maskepos=length(maske))
  59.              and (maske[maskepos]=jo1) THEN
  60.             maskepos:=maskepos+1
  61.           ELSE gleich:=false;
  62.   END;
  63.   IF gleich THEN
  64.     IF (verglpos<=length(verglstr))
  65.       and (flex=false) THEN gleich:=false;
  66.   Wildcard:=gleich;
  67. END;
  68.  
  69.  
  70. BEGIN
  71.   writeln('*?*?*?*?*?* Wildcard-Demo *?*?*?*?*?*');
  72.   writeln;
  73.   writeln('Joker: "*" steht fuer beliebige Zeichen ',
  74.           '(oder kein Zeichen)');
  75.   writeln('       "?" steht fuer ein beliebiges ',
  76.           'Zeichen');
  77.   writeln;
  78.   write('Maske: ');
  79.   readln(eingmaske);
  80.   REPEAT
  81.     write('Vergleich mit: ');
  82.     readln(eingvergl);
  83.     writeln(Wildcard(eingmaske,eingvergl,'*','?'));
  84.   UNTIL eingvergl='';
  85. END.
  86. (* ------------------------------------------------- *)
  87. (*                  WILDCARD.PAS                     *)