|
Una función Like simple (compara una cadena con un patrón)
Copyright © 2000 Ernesto
De Spirito
Like (como)
Hay veces que necesitamos saber si una cadena concuerda con un patrón, que es otra
cadena con caracteres comodines (por ejemplo ? y *). Para
este propósito puede usar la función MatchesMask declarada en la
unidad Masks, pero aquí como un ejemplo académico y porque creemos
que puede ser útil en ciertos casos (por ejemplo cuando no quiere conjuntos) hemos
implementado una función de reemplazo que devuelve True si la cadena
coincide con el patrón y False en caso contrario.
uses SysUtils;
function Like(AString, Pattern: string): boolean;
var
i, n, n1, n2: integer;
p1, p2: pchar;
label
match, nomatch;
begin
AString := UpperCase(AString);
Pattern := UpperCase(Pattern);
n1 := Length(AString);
n2 := Length(Pattern);
if n1 < n2 then n := n1 else n := n2;
p1 := pchar(AString);
p2 := pchar(Pattern);
for i := 1 to n do begin
if p2^ = '*' then goto match;
if (p2^ <> '?') and (p2^ <> p1^) then goto nomatch;
inc(p1); inc(p2);
end;
if n1 > n2 then begin
nomatch:
Result := False;
exit;
end else if n1 < n2 then begin
for i := n1 + 1 to n2 do begin
if not (p2^ in ['*','?']) then goto nomatch;
inc(p2);
end;
end;
match:
Result := True;
end;
Llamada de ejemplo
if Like('Walter', 'WA?T*') then
ShowMessage('¡Funcionó!');
Si quiere ver otro ejemplo, usamos esta
función para determinar si el nombre de un archivo concuerda con una
especificación.
|