Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: MakeNumeric statt isNumeric

  Alt 31. Dez 2011, 18:15
Sollte das in die Code-Library? IMO hat man das so schnell geschrieben, dass es nicht wirklich nötig ist, das aufzunehmen. Oder hast du vergessen, dein Problem zu beschreiben?

Hier aus Spaß eine vermutlich schnellere Variante, die das gleiche erledigt:
Delphi-Quellcode:
function MakeNumeric(s: string; NormalizeDecSep: Boolean=False): string;
var
  i, j: Integer;
  WrongDecSep: Char;
begin
  j := 0;
  if NormalizeDecSep then
  begin
    if DecimalSeparator='.then
      WrongDecSep := ','
    else
      WrongDecSep := '.';
  end;

  for i := 1 to Length(s) do
  begin
    if NormalizeDecSep and (s[i]=WrongDecSep) then
      s[i] := DecimalSeparator;

    if (s[i] >= '0') and (s[i] <= '9') {or (s[i] = '-')} or (s[i] = DecimalSeparator) then
    begin
      inc(j);
      s[j] := s[i];
    end;
  end;
  SetLength(s, j);
  Result := s;
end;
Wenn NormalizeDecSep True ist, werden alle Kommata/Punkte durch den aktuell eingestellten DecimalSeparator ersetzt, wodurch das StringReplace eingespart wird. Man sollte natürlich, je nachdem was man machen will, noch prüfen, ob eine valide Zahl herauskommt. Und eventuell sollte man Minus-Zeichen auch zulassen (s. Code).
  Mit Zitat antworten Zitat