Thomas Schwobe wrote:
> ich glaube wir wissen alle, dass es bei Strings nicht wirklich
> schnell geht. Aber schön, das es mit StrCmpLogicalW schon etwas
> "Erprobtes" gibt.
Schön für dich, wenn dir Microsoft so ein warmes und geborgenes Gefühl gibt, ich
jedenfalls würde immer versuchen, solche relativ simplen Routinen mit eigenen-
oder anderen Delphi-Routinen zu ersetzen. Deshalb hier mal was schnelles Experimentelles,
erfunden nach dem dritten Radeberger, also Vorsicht!! Kann StrCmpLogicalW eigentlich
Int64, Vorzeichen, Fließkomma?:
{code}
function MyCompare(P1, P2: PChar): Integer;
function GetNextInt(var P: PChar): Integer;
begin
Result := 0;
while True do
begin
case P^ of
'0'..'9' : Result := Result * 10 + Ord(P^) - Ord('0');
else
Exit;
end;
Inc(P);
end;
end;
const
LDigits: TSysCharSet = ['0'..'9'];
begin
while (P1^ <> #0) and (P2^ <> #0) do
begin
if CharInSet(P1^, LDigits) then
begin
if CharInSet(P2^, LDigits) then
begin
Result := GetNextInt(P1) - GetNextInt(P2);
if Result = 0 then
Continue
else
Exit;
end
else begin
Result := Ord(P1^) - Ord(P2^);
Exit;
end;
end
else if (P1^ <> P2^) then
begin
Result := Ord(P1^) - Ord(P2^);
Exit;
end
else begin
Inc(P1);
Inc(P2);
end;
end;
Result := Ord(P1^) - Ord(P2^);
end;
{code}
--
Arno