Numeric check

Alle Fragen rund um Basisthemen
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Numeric check

Beitrag von tnyf (ForumUser / 5 / 0 / 0 ) »
Hallo.
Als Basis dient mir ein CHAR-Feld in welchem sich normalerweise numerische Werte befinden.
Da es vorkommen kann, dass ungültige Werte wie z.B. # oder andere Zeichen in diesem Feld sind, muss ich prüfen ob der Wert ein gültiger numerischer Wert ist.
Diese können sein (125.25/125,25/-125.25/125,25 etc). Auf dieses Feld sollte ich nun einen CHECK realisieren, welcher feststellt, ob es sich um einen Numerischen Wert handelt. Hat mir jemand ein Tipp ??
Im Voraus besten Dank.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von LoLo ( / / 0 / 3 ) »
Moin,

meine Empfehlung wäre:

Entfernen aller 'fehlerhaften' bzw. unerwünschten Zeichen mit translate, z.B:

Code: Alles auswählen.

translate number using '# ! " § $ % & / ( ) = ? '.
Komma würde ich übrigens bei der Gelegenheit durch einen Punkt ersetzen!

translate number using ',.'.

Dann folgendes:

Code: Alles auswählen.

data: n type f,
      c(10) type c,
      rc type i.


c = '3,14'.
catch system-exceptions CONVT_NO_NUMBER = 1.
move c to n.
endcatch.
break-point.
In dem Fall wird sy-subrc auf 1 gesetzt, wenn es keine Zahl ist. Wenn es sich hingegen um eine gültige Zahl handelt, ist diese dann in n enthalten.

Ciao, LoLo

Numerisch-Prüfung

Beitrag von meinrad (ForumUser / 67 / 0 / 0 ) »
Hallo,
Dieses Thema wurde schon oft behandelt. Ich habe bisher noch keinen allgemein gültigen Algorithmus gelesen. Das muss man von Hand machen. Man sollte in etwa wissen, was als gültig anzusehen ist:
1,100.25 = 1.100,25 ist beides "numeric edited".
Einmal US, einmal deutsch.
Da hilft auch ein Translate nicht viel.
Meiner Meinung nach muss man Zeichen für Zeichen abfragen. Am Besten von rechts nach links.
Erst Trailing Vorzeichen feststellen, wenn vorhanden,
dann darf es kein führendes geben.
Dann Dezimal Zeichen suchen Punkt oder Komma.
Es darf nicht ein 2. Mal Vorkommen.
Dann Tausender-Trennzeichen suchen, muss sich vom Dezimalzeichen unterscheiden. Punkt, Komma evt. auch Leerstelle ?
Dann führendes Vorzeichen suchen.
Fast unmöglisch sind Wissenschaftliche Schreibweisen
(Brüche: ½ , Potenzen 2² 3³). Aber dafür ist ABAP auch nicht gedacht.
Den Hinweis mit dem CATCH find ich gut.

Beitrag von Gast ( / / 0 / 3 ) »
Und ist '1.234' oder '1,234' nun 1234 (Integer, mit WRITE ausgegeben, oder 1,234?

Wie soll man das entscheiden können?

Und was ist mit Zahlen wie '2E6'?
Ist das 2 mal (10 hoch 6)?

Beitrag von LoLo ( / / 0 / 3 ) »
LoLo hat geschrieben:Moin,

meine Empfehlung wäre:

Entfernen aller 'fehlerhaften' bzw. unerwünschten Zeichen mit translate, z.B:

Code: Alles auswählen.

translate number using '# ! " § $ % & / ( ) = ? '.
Komma würde ich übrigens bei der Gelegenheit durch einen Punkt ersetzen!

translate number using ',.'.

Dann folgendes:

Code: Alles auswählen.

data: n type f,
      c(10) type c,
      rc type i.


c = '3,14'.
catch system-exceptions CONVT_NO_NUMBER = 1.
move c to n.
endcatch.
break-point.
In dem Fall wird sy-subrc auf 1 gesetzt, wenn es keine Zahl ist. Wenn es sich hingegen um eine gültige Zahl handelt, ist diese dann in n enthalten.

Ciao, LoLo
Habe ein kleines Programm geschrieben, welches aus meiner Sicht fast alles beinhaltet. Interesse ??

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
ja Lolo.

bitte posten.



Gruß Andreas

Beitrag von LoLo ( / / 0 / 3 ) »
Moin,

anscheinend gibt es noch einen 2. LoLo?! Ich hätte auch Interesse an dem Programm. Bitte posten.

Ciao, LoLo (der 1. ;-))

Beitrag von Hampster ( / / 0 / 3 ) »
Also ich hatte das mal so gelöst:

Code: Alles auswählen.

perform check_numeric using    $zu_pruefendes_feld
                      changing $error.

form check_numeric using    $value type any
                   changing $error type boolean.
  $error = false.
  if $value cn ' 0123456789.,-'.
    $error = true.
  endif.
endform.
Zur Erklärung
Die Abfrage IF c1 CN c2 bedeutet: c1 enthält nicht nur Zeichen aus c2

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Vergleichbare Themen

Check Javascript
von mika1983 » 20.11.2006 13:25
AUTHORITY-CHECK ?
von 5Jacken » 02.01.2013 12:11
Check auf Integer
von Kojak » 18.09.2006 11:23
AUTHORITY-CHECK
von HH_ABAP » 17.10.2023 09:21
Value Check bei SELECT-OPTIONS
von Tegalus » 10.01.2007 10:55