home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* WILDCARD.PAS *)
- {$D+}
- PROGRAM Wildcard_Demo;
-
- TYPE strmax=string[255];
-
- VAR eingmaske,eingvergl :strmax;
-
-
- FUNCTION InStr(quell,such :strmax; p :byte) :byte;
-
- VAR str :strmax;
-
- BEGIN
- str:=copy(quell,p,length(quell)-p+1);
- InStr:=pos(such,str)+p-1;
- END;
-
-
- FUNCTION Wildcard(maske,verglstr :strmax;
- jo1,jo2 :char) :boolean;
-
- VAR maskepos,verglpos,p :integer;
- ch :char;
- str :strmax;
- gleich,flex :boolean;
-
- BEGIN
- maskepos:=1;
- verglpos:=1;
- gleich:=true;
- flex:=false;
- WHILE (gleich=true) and
- (maskepos<=length(maske)) DO BEGIN
- ch:=maske[maskepos];
- IF ch=jo1 THEN flex:=true;
- IF ch=jo2 THEN verglpos:=verglpos+1;
- IF not (ch in [jo1,jo2]) THEN
- IF flex=true THEN BEGIN
- str:=maske[maskepos];
- WHILE (not (maske[maskepos+1] in [jo1,jo2]))
- and (maskepos<length(maske)) DO BEGIN
- maskepos:=maskepos+1;
- str:=str+maske[maskepos];
- END;
- p:=InStr(verglstr,str,verglpos);
- IF p>0 THEN verglpos:=p+length(str)
- ELSE gleich:=false;
- flex:=false; END
- ELSE
- IF verglstr[verglpos]=ch THEN
- verglpos:=verglpos+1
- ELSE gleich:=false;
- maskepos:=maskepos+1;
- IF (verglpos>length(verglstr))
- and (maskepos<=length(maske)) THEN
- IF (maskepos=length(maske))
- and (maske[maskepos]=jo1) THEN
- maskepos:=maskepos+1
- ELSE gleich:=false;
- END;
- IF gleich THEN
- IF (verglpos<=length(verglstr))
- and (flex=false) THEN gleich:=false;
- Wildcard:=gleich;
- END;
-
-
- BEGIN
- writeln('*?*?*?*?*?* Wildcard-Demo *?*?*?*?*?*');
- writeln;
- writeln('Joker: "*" steht fuer beliebige Zeichen ',
- '(oder kein Zeichen)');
- writeln(' "?" steht fuer ein beliebiges ',
- 'Zeichen');
- writeln;
- write('Maske: ');
- readln(eingmaske);
- REPEAT
- write('Vergleich mit: ');
- readln(eingvergl);
- writeln(Wildcard(eingmaske,eingvergl,'*','?'));
- UNTIL eingvergl='';
- END.
- (* ------------------------------------------------- *)
- (* WILDCARD.PAS *)