String prüfen auf numerische Werte und Stellenanzahl

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

String prüfen auf numerische Werte und Stellenanzahl

Beitrag von Zwenn (ForumUser / 6 / 0 / 0 ) »
Hallo,

leider bin ich auf der Suche nach meinem Problem nicht fündig geworden...

Ich habe in einer Variable (C mit Länge 20) einen Wert drin stehen. Diesen will darauf prüfen, ob er numerisch ist (also nur Zahlen enthält) und 14-stellig ist. Bin schon bei der Prüfung auf numerisch gescheitert. Folgender Code funktioniert leider nicht:

Condense wa.
IF NOT wa CO '1234567890'.

Wahrscheinlich weil der übergebene Wert nicht 20-stellig ist und so noch Leerzeichen am Ende sind.

Habt ihr vielleicht eine Idee auch für die Prüfung der Stellenanzahl?

Danke Zwenn

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


Beitrag von Matthias.Selle (ForumUser / 69 / 1 / 0 ) »
Hallo Zwenn,

strlen hilft, bei contains only mußt Du das Blank aufnehmen.

REPORT ztest NO STANDARD PAGE HEADING.
PARAMETER: p_c(20) TYPE c.
DATA: i TYPE p.
i = STRLEN( p_c ).
WRITE:/ 'Länge', i.
IF p_c CO '1234567890 '.
WRITE:/ 'OK'.
ELSE.
WRITE:/ 'not OK'.
ENDIF.

Gruß Matthias
Zuletzt geändert von Matthias.Selle am 02.07.2008 11:16, insgesamt 1-mal geändert.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
war ja schon fast richtig:

Code: Alles auswählen.

Condense wa.
IF NOT wa CO '1234567890 '. "Leerzeichen noch mit berücksichtigen
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Zwenn (ForumUser / 6 / 0 / 0 ) »
Danke euch erstmal für die Rückmeldung. Wusste doch, dass es einen Befehl zur Längenbestimmung gibt :)

Das mit dem Leerzeichen funktioniert jedoch leider nicht, da dadurch auch Werte akzeptiert werden, die mitten in der Nummer ein Leerzeichen haben...

32021234567891 -> so ist Nummer korrekt
3202.1234.567891 -> nicht korrekt
3202 1234 567891 -> nicht korrekt
320212354 -> nicht korrekt

Der Anwender kann ich dem zu prüfenden Feld zur Zeit leider alles eingeben, jedoch nur Variante 1 wäre korrekt.

Vielleicht noch eine Idee?

Vielen Dank Zwenn

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Nur Zahlen für das feld zulassen.
Wo ist das Einagbefeld Dynpro / Selektionsbild ?

Verwende doch einen Datentyp N, dmit hast du ggf. vornullen aber das ist in anbetracht der Schreibweise das kleinste Problem.

Thomas

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Zwenn hat geschrieben:Danke euch erstmal für die Rückmeldung. Wusste doch, dass es einen Befehl zur Längenbestimmung gibt :)

Das mit dem Leerzeichen funktioniert jedoch leider nicht, da dadurch auch Werte akzeptiert werden, die mitten in der Nummer ein Leerzeichen haben...

32021234567891 -> so ist Nummer korrekt
3202.1234.567891 -> nicht korrekt
3202 1234 567891 -> nicht korrekt
320212354 -> nicht korrekt

Der Anwender kann ich dem zu prüfenden Feld zur Zeit leider alles eingeben, jedoch nur Variante 1 wäre korrekt.

Vielleicht noch eine Idee?

Vielen Dank Zwenn
Wenn du den String einer numerischen Variablen zuweist, weisst du, ob es ein numerischer String war/ist. Bei einem ungültiger Wert in dem String, wird eine Exception ausgelöst. Wenn du jetzt das Ganze in einem try...catch-Block verpackst, hast du es.
Du kannst das aber auch als Fingerübung verstehen und dir einen nichtdeterministischen endlichen Automaten basteln. :D

Re: String prüfen auf numerische Werte und Stellenanzahl

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »

Code: Alles auswählen.

Condense wa.
 IF NOT wa(14) CO '1234567890'.

Beitrag von Thomas R. (Expert / 754 / 74 / 34 ) »
Hallo,
Ennos Lösung ist ein eleganter Ansatz. Aber um die Sache abzusichern muß vorher mit SHIFT LEFT DELETING LEADING space für Linksbündigkeit gesorgt werden und zusätzlich geprüft werden, ob die Stellen 15-20 wirklich leer sind.
MfG
Thomas R.
Zuletzt geändert von Thomas R. am 02.07.2008 16:53, insgesamt 1-mal geändert.

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hi Thomas, den SHIFT LEFT... erledigt der Condense, allerdings muss da noch der Zusatz "NO-GAPS" hin. Mit deinem zweiten Einwand hast du allerdings recht... :wink:

Beitrag von Thomas R. (Expert / 754 / 74 / 34 ) »
Hi Enno,
den CONDENSE habe ich in Deinen LANGEN :lol: Quelltext glatt überlesen.
(und nun noch schnell das falsche TRAILING durch LEADING austauschen...)

MfG
Thomas R.

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ich werde mir mühe geben, etwas ÜBERSICHTLICHER zu antworten... :lol:
it was hard to code so it should be hard to read!!!:twisted:

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
so wie ich die Beispiele verstanden habe, darf kein Condense durchgeführt werden,
denn:
...
3202 1234 567891 -> nicht korrekt
...
ich würde nur ein shift deleting leading ... machen,
und dann prüfen

Gruss Edwin

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »

Code: Alles auswählen.

FIND REGEX '^\s*(0|1|2|3|4|5|6|7|8|9){14}\s*$' IN test.
Sy-Subrc sagt dir ob deine Bedingung erfüllt ist oder nicht.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Thomas R. (Expert / 754 / 74 / 34 ) »
@Edwin
Condense OHNE Zusatz schiebt nach links und ersetzt mehrfache Leerzeichen durch ein einzelnen Leerzeichen. Insofern ist Condense hier sehr wohl einsetzbar.

MfG
Thomas R.

Beitrag von TakerOne (Specialist / 102 / 0 / 3 ) »
Hi,

für solche Zwecke bieten sich auch die FUBA

RS_CONV_EX_2_IN bzw.
RS_CONV_EX_2_IN_DTEL an

Input das zu prüfende Alphafeld
und Art des Feldes
Ausgabe das Zielfeld

Beispiel:
Input Alphawert
Art = MATNR
Ausgabefeld xxxx type MATNR

Ergebnis: wenn ok, dann entsprechend aufbereitetes Empfangsfeld
ansonsten div Fehlermeldungen
*" INPUT_NOT_NUMERICAL
*" TOO_MANY_DECIMALS
*" MORE_THAN_ONE_SIGN
*" ILL_THOUSAND_SEPARATOR_DIST
*" TOO_MANY_DIGITS
*" SIGN_FOR_UNSIGNED
*" TOO_LARGE
*" TOO_SMALL
*" INVALID_DATE_FORMAT
*" INVALID_DATE
*" INVALID_TIME_FORMAT
*" INVALID_TIME
*" INVALID_HEX_DIGIT
*" UNEXPECTED_ERROR
*" INVALID_DTEL
*" FIELD_AND_DTEL_INCOMPATIBLE
*" INPUT_TOO_LONG
*" NO_DECIMALS
*" INVALID_FLOAT
*" CONVERSION_EXIT_ERROR


Gruß TakerOne
Ich bin eigentlich ein sehr netter Mensch.
Wenn ich Freunde hätte, könnten diese es bestätigen. :-)

Vergleichbare Themen

3
Antw.
1834
Views
Ausschließlich numerische Werte
von greenhorn » 25.07.2011 15:55 • Verfasst in ABAP® für Anfänger
5
Antw.
4263
Views
Prüfen der Werte bei Merkmalbewertung per FB
von xanatos » 02.06.2005 14:12 • Verfasst in ABAP® Core
8
Antw.
1081
Views
String auf bestimmte Buchstaben prüfen
von debianfan » 18.03.2022 12:50 • Verfasst in ABAP® für Anfänger
5
Antw.
3302
Views
Beliebige Werte gegen die Schablone des Merkmals prüfen
von zer0 » 08.11.2013 13:12 • Verfasst in ABAP® Core
2
Antw.
15263
Views
String die ersten drei Zeichen prüfen
von Marc K. » 02.04.2012 14:19 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 4 Tagen von jocoder 2 / 66
Etikettendruck mit SmartForms
vor einer Woche von a-dead-trousers 2 / 67

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.

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 4 Tagen von jocoder 2 / 66
Etikettendruck mit SmartForms
vor einer Woche von a-dead-trousers 2 / 67

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Wochen von Lucyalison 1 / 129
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 164