Registriert seit: 25. Aug 2005
5 Beiträge
|
Re: fastwild - Wildcard matching mit Kompilierung zur Laufze
25. Aug 2005, 13:37
Erstmal: Danke für das Lob!
Die Idee ist gut, bisher hab ich einfach immer bei jedem neuen Feature daran rumgetestet, aber so gehts wirklich einfacher. Ich hab mal schnell was zusammengehackt:
Ich glaube aber, die wirklichen Problemfälle fehlen noch.
Delphi-Quellcode:
program test;
{$APPTYPE CONSOLE}
uses
fastwild;
const
TrueTests: array[0..18, 0..1] of string = (
('', ''),
('a', 'a'),
('?', 'a'),
('??', 'ab'),
('*', ''),
('*', 'a'),
('*', 'aa'),
('*???', 'abc'),
('*???', 'abcd'),
('*test?*', 'tester'),
('*.*', 'fastwild.pas'),
('[a-z]', 'a'),
('[+a-z]', 'hallo'),
('[*a-z]', ''),
('[!abc]', 'd'),
('[a-]', '-'),
('[z-a]', '-'),
('[!-c]', 'b'),
('*a*b*', 'kebab')
);
FalseTests: array[0..4, 0..1] of string = (
('a', 'b'),
('', 'a'),
('*???', 'ab'),
('?', ''),
('*a*b*', 'erbanlage')
);
var
i: integer;
f: TWildcardFunction;
begin
WriteLn(' pattern string exp.res. result');
WriteLn('==============================================================');
for i := low(TrueTests) to high(TrueTests) do
begin
f := CompileWildcardFunction(TrueTests[i, 0]);
try
WriteLn(TrueTests[i, 0]:16, TrueTests[i, 1]:21, 'TRUE':13, f(PChar(TrueTests[i, 1])):10);
finally
FreeWildcardFunction(f);
end;
end;
for i := low(FalseTests) to high(FalseTests) do
begin
f := CompileWildcardFunction(FalseTests[i, 0]);
try
WriteLn(FalseTests[i, 0]:16, FalseTests[i, 1]:21, 'FALSE':13, f(PChar(FalseTests[i, 1])):10);
finally
FreeWildcardFunction(f);
end;
end;
ReadLn;
end.
Cheers!
{$APPTYPE CONSOLE}uses SysUtils;const a='{$APPTYPE CONSOLE}uses SysUtils;const a=%s;begin write(Format(a,[#39+a+#39]))end.';begin write(Format(a,[#39+a+#39]))end.
|