gelöst Zeichenprüfung


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Zeichenprüfung

Beitragvon Abapsocke » 13.07.2018, 11:20

Hallo,

ich möchte eine Zeichenfolge überprüfen.
Also Beispielsweise 'A0123'

Code: Alles auswählen
If usereingabe EQUALS 'A0123'


-> dann ist alles super

Allerdings soll das Programm nur schauen ob an der ersten Stelle ein A ist und danach vier Ziffern folgen Welche Ziffern das sind ist egal. Wenn dem so ist -> super.
Abapsocke
ForumUser
 
Beiträge: 37
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Zeichenprüfung

Beitragvon Legxis » 13.07.2018, 11:24

Code: Alles auswählen
IF usereingabe+0(1) EQ 'A' AND usereingabe+1(4) CO '0123456789'.
Ich bin Neuling und für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele dankbar^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Für diese Nachricht hat Legxis einen Dank bekommen :
Abapsocke
Legxis
Specialist
 
Beiträge: 100
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 17 mal
Ich bin: Student/in

Re: Zeichenprüfung

Beitragvon Abapsocke » 13.07.2018, 11:32

Danke top
Abapsocke
ForumUser
 
Beiträge: 37
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zeichenprüfung

Beitragvon lausek » 13.07.2018, 11:38

@Legxis Antwort ist schon sehr gut. Die solltest du nehmen.

Ich wollte hier trotzdem nochmal kurz Regex aufbringen, da das ein sehr nützliches Tool ist - gerade wenn die Bedingungen für einen String komplexer werden:

Code: Alles auswählen
FIND REGEX '^A\d{4}$' IN usereingabe.
IF sy-subrc = 0.
    " ... passt
ENDIF.
 


Der Ausdruck baut sich so auf:
^ - Anfang des Strings, das nächste Zeichen ist der erste Buchstabe
A - entspricht genau dem Buchstaben
\d - ist ein alias für Nummern also 0123456789
{4} - genau vier Zeichen
$ - Ende des String, das vorige Zeichen ist der letzte Buchstabe (also die vier Zahlen)
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Zeichenprüfung

Beitragvon ralf.wenzel » 13.07.2018, 12:48

Man sollte es aber in einem Kommentar erklären, weil viele mit Regex nichts anfangen können - sowas wie

Code: Alles auswählen
" check for 'Annnn' - n = numeric digit


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3093
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 176 mal
Ich bin: Freiberufler/in

Re: Zeichenprüfung

Beitragvon Abapsocke » 13.07.2018, 14:38

Danke für den Tipp.
Die Möglichkeiten von Regex kann ich gerade sehr gut gebrauchen.
Abapsocke
ForumUser
 
Beiträge: 37
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zeichenprüfung

Beitragvon black_adept » 14.07.2018, 23:12

@lausek
deine Antwort stimmt zwar für Strings, aber Abapsocke sprach von Zeichenfolgen, so dass auch C-Felder erlaubt sein könnten. Und für Regex zählen bei diesen die abschließenden Leerzeichen mit, so dass man vor dem $ noch ein /s* hinzufügen muss.
Der korrekte Regex wäre somit ^A\d{4}\s*$

@Ralf: Das mit dem Kommentar ist immer eine gute Idee, aber nicht weil es Nichtwissende gibt. Sonst müsste man ja auch einen funktionalen Methodnaufruf oder eine Inlinedeklaration kommentieren, bloß weil es immer noch Dinos gibt....
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 3014
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 506 mal
Ich bin: Freiberufler/in

Re: Zeichenprüfung

Beitragvon ralf.wenzel » 15.07.2018, 06:42

Nein. Regex sind schon sehr speziell und ganz besonders unlesbar für jemanden, der es nicht kennt. Bei einem Methodenaufruf kann der Entwickler einwirken durch Namensvergabe. Eine Regex kann ich nur per Kommentar erklären, zumal sie praktisch unendlich komplex sein kann.


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3093
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 176 mal
Ich bin: Freiberufler/in

Re: Zeichenprüfung

Beitragvon black_adept » 16.07.2018, 12:20

ralf.wenzel hat geschrieben:Nein. Regex sind schon sehr speziell und ganz besonders unlesbar für jemanden, der es nicht kennt. Bei einem Methodenaufruf kann der Entwickler einwirken durch Namensvergabe. Eine Regex kann ich nur per Kommentar erklären, zumal sie praktisch unendlich komplex sein kann.
Du hast nicht den Tenor meiner Bemerkung erkannt. Genau so wie es Leute gibt, die keine funktionalen Methodenaufrufe verstehen ( weil sie als Dinos eben nur FORMs und FuBa kennen ), gibt es auch Leute, die sich nicht die Mühe machen reguläre Ausdrücke - zumindest rudimentär - zu verstehen. Beides ist zur Beherrschung der (ABAP)Sprache nötig. Und wenn wir die Lernunwilligen verhätscheln hilft das niemandem - egal ob es sich um OO-Verweigerer oder Regex-Ignorierende handelt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 3014
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 506 mal
Ich bin: Freiberufler/in

Re: Zeichenprüfung

Beitragvon ralf.wenzel » 16.07.2018, 12:52

Ich habe (meiner Erinnerung nach) in 20 Jahren noch keine Regex gebraucht, obwohl ich sie immer mal sinnvoll einsetzen wollte. Ich habe auch noch nie im SAP-Coding (oder überhaupt in ABAP außerhalb von Büchern) eine Anwendung von Regex gesehen.

Es ist deutlich schwerer, 20 Jahre ABAP zu verwenden, ohne (in irgendeinem Coding) auf einen funktionalen Methodenaufruf zu stoßen.

Regex ist eine Nischenanwendung, die zudem ihren eigenen Regeln folgt. Und es würde den Lesefluss auch für mich als Entwickler mit 20 Jahren Erfahrung massiv stören, wenn da eine unkommentierte Regex erscheint. Weil ich zum Entschlüsseln in mein Regex-Buch gucken müsste. Darum halte ich einen kurzen Kommentar (der menschlich einfach lesbar ist, wie mein Beispiel).


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3093
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 176 mal
Ich bin: Freiberufler/in

Re: Zeichenprüfung

Beitragvon fr-g » 16.07.2018, 13:01

Nachtrag zur Lösung:
Ich würde in dem konkreten Fall eine Regex-Lösung mit FIND präferieren. Beim anderen Vorschlag müsste man sicherheitshalber noch STRLEN überprüfen, damit man mit dem Offset nicht im Leeren landet ;) ...gerade eine Usereingabe könnte ja evtl. leer sein o.ä.
fr-g
ForumUser
 
Beiträge: 29
Registriert: 26.05.2017, 15:25
Dank erhalten: 11 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst Nachricht nach Beendigung der Verbuchung
vor 2 Stunden von ewx 2 Antw.
BCS sendet Mails immer als express?
vor 3 Stunden von Legxis 2 Antw.
Zuordnung in Grid (Screen)
vor 7 Stunden von HH_ABAP 0 Antw.
FBL3N ---> FB60
vor 8 Stunden von HH_ABAP 2 Antw.
Klasse zum lesen der Adressdaten
vor 7 Stunden von AdrianSchm 2 Antw.

  Ähnliche Beiträge beta
Keine Beiträge gefunden - versuche es mit der erweiterten Suche.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder