Ich persönlich halte die dort genannte Funktion für etwas Overkill, um "nur" z.B. bei einer Eingabe die ungültigen Zahlen herauszufilter.
Na gut, dort drüben war's auch 'ne etwas andere Anforderung.
- schneller
- öfters
- anderes Extraktionsmuster
Also kann man es sich nun aussuchen:
- "lösche alles, was keine Zahl ist"
Delphi-Quellcode:
function GetNum(S: String): Integer;
var i: Integer;
begin
for i := Length(S) downto 1 do
if not (S[i] in ['0'..'9']) then Delete(S, i, 1);
Result := IntToStr(S);
end;
- "hänge alle Zahlen an einen neuen String an"
(siehe scrat1979)
- "füge alle Zahlen in einen neuen String ein", bzw. "... einem neuen String zusammen"
function ExtractNumbers(s : String) : String;
Delphi-Quellcode:
var i : Integer;
begin
Result := '';
for i := 1 to length(s) do
if s[i] in ['0'..'9'] then Insert(S[i], Result, MaxInt);
end;
Von den letzen beiden Varianten ist Michaels zwar 'nen "Hauch" langsamer, aber dafür bissl verständlicher.
Schneller geht es dann nur noch (wenn man es denn unbedingt braucht), indem man
- bei langen Strings alles Gewünschte/Erlaubte via PChar in einen String mit maximal zu erwartender Länge kopiert und den String dann kürzt
- bei "kurzen" Strings alles Gewünschte/Erlaubte zählt, den neuen String mit passender Länge erstellt und dann die gewünschten Teile da reinkopiert.
jenachdem was schneller geht
- die zusätzliche String- und Speicheroperation
- alles zusätzlich nochmal durchzugehn und mitzuzählen