[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Lost] Review erbeten: FilenameMatches
Die Funktion war jetzt schon ein paarmal kaputt. Es wäre Zeit, daß sich jemand
die Funktion wirklich gründlich vornimmt und durchschaut, ob das so
funktionieren kann. Ich sehe im Moment kein Problem, aber wie gesagt, das
ging mir schon ein paarmal so.
Function FilenameMatches(const filename: String; pattern: String): boolean;
var
i_pattern: integer;
i_file: integer;
subname: String;
j: integer;
begin
// TODO FilenameMatches
WriteLn('FilenameMatches: "'+filename+'" = "'+pattern+'"');
i_pattern := 0;
i_file := 1;
while i_pattern < length(pattern) do begin
Inc(i_pattern);
if i_file > length(filename) then begin
exit(false);
end;
case pattern[i_pattern] of
'?':
begin
Inc(i_file);
end;
'*':
begin
while pattern[i_pattern] = '*' do begin
Inc(i_pattern);
end;
pattern := Copy(pattern, i_pattern, length(pattern));
for j := i_file to length(filename) do begin
subname := Copy(filename, j, length(filename));
if FilenameMatches(subname, pattern) then begin
WriteLn('Match');
exit(true);
end;
end;
exit(false);
end;
else
begin
if pattern[i_pattern] <> filename[i_file] then begin
exit(false);
end;
Inc(i_file);
end;
end;
end;
exit(i_file = length(filename) + 1);
end;