Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   MakeNumeric statt isNumeric (https://www.delphipraxis.net/165448-makenumeric-statt-isnumeric.html)

Gustav.R 31. Dez 2011 17:00

MakeNumeric statt isNumeric
 
function MakeNumeric(Str: string): string;
var I: Integer;
s: string;
begin
s := '';
for i := 1 to Length(Str) do
begin
if str[i] in ['0'..'9', ','] then
s := s + str[i];
end;
Result := s;
end;

Der String wird an MakeNumeric bei mir nach einem
Str := StringReplace(Str, '.', ',', [rfReplaceAll]);
übergeben.

Zweck des Unfugs:
Zwei Strings (die "Zahlen" enthalten) miteinander vergleichen...

HTH

LG
Gustav

Namenloser 31. Dez 2011 18:15

AW: MakeNumeric statt isNumeric
 
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).

gammatester 31. Dez 2011 19:59

AW: MakeNumeric statt isNumeric
 
Da die Funktion mit Strings von Gleitkommazahlen arbeitet, ist es ein weiterer schwerer Fehler (neben dem schon erwähnten Vorzeichenverlust), wenn der Exponententeil verstümmelt wird: -1.234E-5 wird zu 12345 !!

himitsu 1. Jan 2012 03:18

AW: MakeNumeric statt isNumeric
 
Was soll denn wie verglichen werden?
Und was genau soll MakeNumeric denn eigentlich machen?


12,345,678.9 würde in 12,345,6789 umgewandelt

Aus "abc123,456,789 def -19 xyz" wird 123,456,789-19 was ja auch nicht ganz ok aussieht.

Gustav.R 3. Jan 2012 17:45

AW: MakeNumeric statt isNumeric
 
Natürlich soll das nicht in die Code-Library! Deshalb auch unter K&T!

Und was Euere neueren Delphis können, finde ich ECHT super!

Ist für mich allerdings kein Argument für ein sauteures Update/Upgrade, wenn sich Funktionen recht einfach Nachprogrammieren lassen.

Leute Leute, kauft einfach jedes Update oder Upgrade!

Nur DAMIT werdet ihr vom Deppen zum Profi - einfach nur immer wieder Updates oder Upgrades kaufen!

GG

Iwo Asnet 3. Jan 2012 18:04

AW: MakeNumeric statt isNumeric
 
Dieser Beitrag bewirkt, das ein ziemlich großes Fragezeichen über meinem Kopf schwebt.
Es stört zwar nicht, macht aber komische Geräusche, wenn ich durch die Tür gehe.

Gustav.R 3. Jan 2012 19:22

AW: MakeNumeric statt isNumeric
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1144185)
Dieser Beitrag bewirkt, das ein ziemlich großes Fragezeichen über meinem Kopf schwebt.
Es stört zwar nicht, macht aber komische Geräusche, wenn ich durch die Tür gehe.

Na un' nu'?

Woas I anet!

Beim Mitlesen in der DP bekomme ich Tipps und Tricks mit, die mir oft weiterhelfen.

Dein Problem dürfte ein Tinitus sein? Oder hast Du was gegen pascalnähere Lösungen, die nicht auf die neueren/neuesten Delphiversionen beruhenen?

GG

Gustav.R 3. Jan 2012 19:29

AW: MakeNumeric statt isNumeric
 
Zitat:

Zitat von himitsu (Beitrag 1143865)
Was soll denn wie verglichen werden?
Und was genau soll MakeNumeric denn eigentlich machen?


12,345,678.9 würde in 12,345,6789 umgewandelt

Aus "abc123,456,789 def -19 xyz" wird 123,456,789-19 was ja auch nicht ganz ok aussieht.

Habe hier zwei Blondinen zum Testen, aber an zwei Kommas pro Edit habe ich echt nicht gedacht...

:oops::thumb:

GG


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz