String-Eingabe prüfen auf numerischen Wert

Getting started ... Alles für einen gelungenen Start.
15 Beiträge • Seite 1 von 1
15 Beiträge Seite 1 von 1

String-Eingabe prüfen auf numerischen Wert

Beitrag von madeleine104 (ForumUser / 7 / 4 / 0 ) »
Hallo zusammen,

ich habe ein Eingabefeld, das CHAR 250 definiert ist.
Es dient dazu, einen Wert für ein zuvor ausgewähltes Feld einzugeben.
Das einzugebende Feld kann natürlich auch NUM sein (wie z.B. EISBE aber auch CHAR wie z.B. Dispo.

Wird nun ein Num-Wert im falschen Format eingegeben, gibt es einen Dump. (Z.B. 21, 345 anstatt 21.345)
D.h. ich müsste prüfen, ob die Eingabe sich auf ein NUM-Feld bezieht und dann ggf. von CHAR auf NUM konvertieren.
Ich kann aber unmöglich alle infrage kommenden NUM-Felder explizit abfragen.
Bestimmt gibt es ein schöne Lösung, dies herauszufinden ? ... die ich nicht kenne (stecke noch in den "Kinderschuhen")
Und dann noch das Konvertieren?

Danke und Grüße

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


Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von SAP_ENTWICKLER (Specialist / 445 / 219 / 6 ) »
Hallo,

wenn ich das Problem richtig verstehe wird im Vorfeld ein Zielfeld ausgewählt in das die Eingabe erfolgen soll. Dann braucht man ja nur die Eigenschaften dieses einen Feldes prüfen und nicht die aller möglichen Felder.

Ich weiß jetzt nicht ob die Zielfelder über eine Struktur definiert sind. Das sollte man tun, weil man dann über das DDIC (Tabelle DD03L Tabellenfelder) den Datentyp ermitteln und prüfen kann.



Viele Grüße

Norbert

Folgende Benutzer bedankten sich beim Autor SAP_ENTWICKLER für den Beitrag:
madeleine104


Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Moin,

reicht es nicht zu prüfen, ob dein CHAR250 Feld ein Komma enthält? Wenn ein Komma gefunden wird dann einfach mit

Code: Alles auswählen.

TRANSLATE lv_char250 USING ',.'.
umformen?
Sofern es über 1000 geht im Wert müsste man das ganze noch vorab mit

Code: Alles auswählen.

TRANSLATE lv_char250 USING '. '. CONDENSE lv_char250 NO-GAPS.
der Tausender Trenner entfernt werden.

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
madeleine104

Gruß,
der Matze

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
moin.
Mein Vorschlag:

Code: Alles auswählen.

* Stelle sicher Code hat nur Ziffern
IF code CO '0123456789'.
  lv_QCODE = qpcd-code.
ENDIF.
CO = Contains Only

und wenn der Punkt auch noch gültig ist, dann..

Code: Alles auswählen.

* Stelle sicher Code hat nur Ziffern oder Punkt
IF code CO '.0123456789'.
  lv_QCODE = qpcd-code.
ENDIF.

gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
madeleine104

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von madeleine104 (ForumUser / 7 / 4 / 0 ) »
Hallo Norbert,
das ist genau das, was ich gesucht habe! Vielen Dank. Allerdings gibt es auch eine Klasse/Methode, mit der man das auch festellen kann/ können soll: CL_ABAP_TYPEDESCR
Hast Du damit schon Erfahrungen gemacht? Danke und Grüße

An die anderen:
Ich kann nicht einfach auf numerische Eingabe prüfen, da abhängig vom "Zielfeld", auf das sich die Eingabe bezieht, auch eine CHAR - Eingabe richtig sein kann. Ich muss also erst ermitteln, wie das Zielfeld (das variabel ist) definiert ist.


AUf jeden Fall vielen Dank an alle. Ich probiere jetzt erst mal DD03L aus.... Und vielleicht die genannte Klasse

Grüße und schon mal ein schönes Wochenende

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Vielleicht hilft dir auch der Funktionsbaustein RS_CONV_EX_2_IN.

Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
madeleine104


Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Wenn du faul sein willst nimm einen TRY-CATCH-Block.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
black_adept hat geschrieben:Wenn du faul sein willst nimm einen TRY-CATCH-Block.
Vorsicht. Das funktioniert leider nicht immer. Einige der Fehler die bei einer Zuweisung (MOVE TO) auftreten können sind (noch) nicht als behandelbare Exceptions abgebildet. :cry:
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
a-dead-trousers hat geschrieben:
black_adept hat geschrieben:Wenn du faul sein willst nimm einen TRY-CATCH-Block.
Vorsicht. Das funktioniert leider nicht immer. Einige der Fehler die bei einer Zuweisung (MOVE TO) auftreten können sind (noch) nicht als behandelbare Exceptions abgebildet. :cry:
Huch - welche denn?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
http://help.sap.com/abapdocu_702/en/abapmove.htm
Abschnitt "Non-Catchable Exceptions"

Ich bin schon des öfteren über MOVE_NOT_SUPPORTED gestolpert (z.B. Parameter mit TYPE ANY auf korrekten Inhalt prüfen)
Auf dieses Beispiel bezogen könnte der BCD_BADDATA eventuell auftreten.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
a-dead-trousers hat geschrieben:Auf dieses Beispiel bezogen könnte der BCD_BADDATA eventuell auftreten.
Ich glaube nicht dass dieser Fehler auftreten kann, da hier das Sourcefeld vom Typ P sein müsste. Aber lt Originalposting startet das Ganze von einem Char-250 Feld. Und mir fällt momentan tatsächlich kein Fall ein, in dem ein = ( MOVE ) von einem C-Feld in ein anderes auf eine nicht-abfangbare Exception läuft.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,

noch eine Ergänzung - soll das eine Zahl mit Nachkomma Stellen/Tausender Trenner sein, dann verlasse Dich nicht auf Dezimal Punkt oder Komma, ermittle die Einstellungen aus dem Benutzerstamm:

Code: Alles auswählen.

  DATA G_DECIMAL_SIGN TYPE SY-BATCH
  CALL FUNCTION 'CLSE_SELECT_USR01'  "get decimal sign
       IMPORTING
              decimal_sign = g_decimal_sign.
erst jetzt kannst Du die Konvertierungen durchführen abhängig von den Einstellungen

Code: Alles auswählen.

   DATA data_str  type c length 250.
   DATA data_p   type p decimals 3. 
   IF g_decimal_sign = ','.
* Bei Tausender Trenner = '.' ersetze diese mit Space
     TRANSLATE data_Str using '. '.
* zusammenschieben    
     CONDENSE  data_Str NO-GAPS.
* jetzt noch das komma durch Punkt ersetzen  
     TRANSLATE data_Str using ',.'.
* und links schieben, damit das auch in ein packed Feld passt
     shift data_Str left DELETING LEADING space.
   else.
* Bei Tausender Trenner = ',' (engl) ersetze diese mit Space
     TRANSLATE data_Str using ', '.
* zusammenschieben    
     CONDENSE  data_Str NO-GAPS.
* jetzt noch das Dezimal Komma ist eh schon  Punkt  
* und links schieben, damit das auch in ein packed Feld passt
     shift data_Str left DELETING LEADING space.
 endif.


nach dieser Konvertierung kannsst das in ein Packed Feld / schieben

Code: Alles auswählen.

* Jetzt noch auf gültige Zeichen Dezimalpunkt Vorzeichen Zahlen und Leerzeichen prüfen
  IF data_Str CO ' +-.0123456789'.
    TRY.
        data_p = data_str.
* Fange ab was immer Du willst
      CATCH cx_root.
        "Fehlerbehandlung
    ENDTRY.
  ELSE.
    " Fehler Zeichen nicht gültig 
  ENDIF.

der FB "RS_CONV_EX_2_IN" gibt leider eine "E" Meldung aus im ALV-Grid ist das besonders "gut"

/Edwin

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
der FB "RS_CONV_EX_2_IN" gibt leider eine "E" Meldung aus im ALV-Grid ist das besonders "gut"
Bitte Doku zur vordefinierten Exception "error_message" bei CALL FUNCTION lesen.

Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
edwin


Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Ok, ok - habe ihn schon eine Decade nicht mehr benutzt :oops:

/Edwin

Re: String-Eingabe prüfen auf numerischen Wert

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
hallo zusammen,

ich würde hier mit einem try-catch-Block arbeiten.

Code: Alles auswählen.

  DATA: lr_root   TYPE REF TO cx_root,
            lv_string TYPE string,
            lv_value  TYPE char10 VALUE '2,3',
            lv_calc   TYPE p DECIMALS 2.

  TRY.
      lv_calc = lv_value.
   CATCH cx_root INTO lr_root.
      lv_string = lr_root->kernel_errid.
  ENDTRY.
Im Beispiel erhalte ich den Fehler mit der kernel_errid "CONVT_NO_NUMBER"

In der DB-Tabelle "SNAPT" können die Fehler ausgelesen werden, falls benötigt.

So könnte die Kompatiblität relativ einfach sichergestellt werden.

Liebe Grüße
abuma

Seite 1 von 1

Vergleichbare Themen

3
Antw.
4014
Views
Prüfung auf Numerischen Wert?
von Jumper » 19.10.2004 10:57 • Verfasst in ABAP® Core
8
Antw.
1042
Views
String auf bestimmte Buchstaben prüfen
von debianfan » 18.03.2022 12:50 • Verfasst in ABAP® für Anfänger
3
Antw.
3155
Views
Wert in einem String abfragen
von JGotthardt » 05.03.2012 15:03 • Verfasst in ABAP® für Anfänger
2
Antw.
15189
Views
String die ersten drei Zeichen prüfen
von Marc K. » 02.04.2012 14:19 • Verfasst in ABAP® für Anfänger
16
Antw.
26892
Views
String prüfen auf numerische Werte und Stellenanzahl
von Zwenn » 02.07.2008 10:20 • Verfasst in ABAP® für Anfänger

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.