Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.170 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zahlen aus String extrahieren

  Alt 1. Okt 2010, 01:32
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat