|
Determinando si un nombre de archivo coincide con una especificación
Copyright © 2000 Ernesto
De Spirito
MatchesSpec
A veces necesitamos saber si el nombre de un archivo concuerda con
una especificación de archivos (un nombre con caracteres
comodines: ? 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 usar conjuntos) hemos implementado una función de reemplazo que
devuelve True si el archivo dado concuerda con una
especificación y False en caso contrario.
uses SysUtils;
function MatchesSpec(const NomArch, Patron: string): boolean;
var
NomP, ExtP, NomA, ExtA: string;
begin
NomA := ExtractFileName(NomArch);
NomP := ExtractFileName(Patron);
ExtA := ExtractFileExt(NomA);
ExtP := ExtractFileExt(NomP);
SetLength(NomA, Length(NomA) - Length(ExtA));
SetLength(NomP, Length(NomP) - Length(ExtP));
if NomP = '' then NomP := '*';
if ExtP = '' then ExtP := '.*';
if ExtA = '' then ExtA := '.';
Result := Like(NomA, NomP) and Like(ExtA, ExtP);
end;
Llamada de ejemplo
if MatchesSpec('Documento1.doc', 'DOC*.DO?') then
ShowMessage('¡Funcionó!');
|