[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;