I don't need to test my programs. I have an error-correcting modem.
Legacy:MaskedCompare
From Unreal Wiki, The Unreal Engine Documentation Site
With the algoritm below you can compare a string with a wild card string.
Usage
There are two types of wild cards: * to match zero or more characters and ? to match a single character
For example, the mask bite my *ass matches:
bite my ass bite my shining metal ass bite my ass
The mask mich?el matches:
michael michiel
But not:
michel michaeel
Code
// Internal function used for MaskedCompare
static private final function bool _match(out string mask, out string target)
{
local string m, mp, cp;
m = Left(mask, 1);
while ((target != "") && (m != "*"))
{
if ((m != Left(target, 1)) && (m != "?")) return false;
mask = Mid(Mask, 1);
target = Mid(target, 1);
m = Left(mask, 1);
}
while (target != "")
{
if (m == "*")
{
mask = Mid(Mask, 1);
if (mask == "") return true; // only "*" mask -> always true
mp = mask;
cp = Mid(target, 1);
m = Left(mask, 1);
}
else if ((m == Left(target, 1)) || (m == "?"))
{
mask = Mid(Mask, 1);
target = Mid(target, 1);
m = Left(mask, 1);
}
else
{
mask = mp;
m = Left(mask, 1);
target = cp;
cp = Mid(cp, 1);
}
}
while (Left(mask, 1) == "*")
{
mask = Mid(Mask, 1);
}
return (mask == "");
}
// Compare a string with a mask
// Wildcards: * = X chars; ? = 1 char
// Wildcards can appear anywhere in the mask
static final function bool MaskedCompare(coerce string target, string mask, optional bool casesensitive)
{
if (!casesensitive)
{
mask = Caps(mask);
target = Caps(target);
}
if (mask == "*") return true;
return _match(mask, target);
}
