![]() |
Alle nicht numerischen Zeichen aus String entfernen
Moin,
ich habe ein Betragsfeld nach dem Format "1.234,56" und möchte nun alle nicht numerischen Zeichen aus diesem String entfernen. Da verschiedene Länder verschiedene Formatierungen haben, zb. Schweiz "1'234.56", wollte ich das jetzt nicht mit mehreren StringReplace durchgehen. Gibt es da eine einfache Möglichkeit sämtliche nicht numerischen Zeichen zu entfernen? |
Re: Alle nicht numerischen Zeichen aus String entfernen
Kopiert aus der
![]()
Delphi-Quellcode:
function StrKeepChars(const S: string; const Chars: TSysCharSet): string;
{$IFDEF CLR} var I: Integer; sb: StringBuilder; begin sb := StringBuilder.Create(Length(S)); for I := 0 to S.Length - 1 do if AnsiChar(S[I]) in Chars then sb.Append(S[I]); Result := sb.ToString(); end; {$ELSE} var Source, Dest: PChar; Len, Index: Integer; begin Len := Length(S); SetLength(Result, Len); UniqueString(Result); Source := PChar(S); Dest := PChar(Result); for Index := 0 to Len-1 do begin if Source^ in Chars then begin Dest^ := Source^; Inc(Dest,SizeOf(Char)); end; Inc(Source,SizeOf(Char)); end; SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(Char)); end; b := StrStrKeepChars(a, ['0'..'9', '.', ',']); |
Re: Alle nicht numerischen Zeichen aus String entfernen
Hallo,
ich denke das ist recht gut mit Regulären Ausdrücken zu machen. Für Delphi gibt es da eine ![]() Ein Tool um Deine Ausdrücke zu Testen gibt es ![]() Grüße Klaus |
Re: Alle nicht numerischen Zeichen aus String entfernen
Hi,
wie wäre es damit (nur schnell runtergetippt):
Delphi-Quellcode:
function GetNumerics(s: string): string;
var i: Integer; tmp_result: string; begin tmp_result := ''; for i := 1 to Length(s) do begin if s[i] in ['0'..'9', '.', ','] then tmp_result := tmp_result + s[i]; end; result := tmp_result; end; |
Re: Alle nicht numerischen Zeichen aus String entfernen
Danke für eure Antworten,
hab jetzt nach Matzes Lösungsweg gemacht. Hätt ich aber auch selbst drauf kommen können :wall: |
Re: Alle nicht numerischen Zeichen aus String entfernen
@matze: Die Variante würde ich eher nicht nehmen da sich die Länge vom String ständig ändert was ein umerhkopieen des Speichers zu Folge hat. Bei einigen Memorymanagern (zum Beispiel dem von Delphi7) wird dadurch der Speicher arg fragmentiert und irgendwann kommt die Meldung das kein Speicher mehr zur Verfügung steht weil nicht genügend zusammenhängender Speicher da ist.
Folgende Variante hätte ich noch:
Delphi-Quellcode:
function RemoveNonNumeric(AStr: String): String;
var lCount, lPos : Integer; begin lPos := 1; for lCount := 1 to Length(AStr) do begin if (AStr[lCount] in ['0'..'9', '.', ',']) then begin AStr[lPos] := AStr[lCount]; inc(lPos); end; end; result := copy(AStr, 1, lPos - 1); end; |
Re: Alle nicht numerischen Zeichen aus String entfernen
Hallo,
falls es nur darum geht aus einem numerischen DisplayString einen EditString zu machen, dann reduziert sich das Problem ja auf das Entfernen des Kolonnentrennzeichen (Tausenderpunkt):
Delphi-Quellcode:
Nach Entfernung der Lesehilfe lässt sich das Ergebnis mittels StrToFloat() wieder für Berechnungen verwenden, insofern ist der Verbleib des Dezimaltrenners nicht ganz ungeschickt.
function Without(const s: string; charSet: TSysCharSet): string;
var i, iDel: Integer; begin Result := s; iDel := 0; for i := 1 to Length(s) do if not (s[i] in charSet) then Result[i - iDel] := s[i] else Inc(iDel); SetLength(Result, Length(s) - iDel); end; // Without('1.234.567,89', [ThousandSeparator]) Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz