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 dankbar für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele^^
( 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: 127
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 20 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: 3151
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 179 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: 3074
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 522 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: 3151
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 179 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: 3074
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 522 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

Für diese Nachricht hat ralf.wenzel einen Dank bekommen :
DeathAndPain
ralf.wenzel
Top Expert
 
Beiträge: 3151
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 179 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: 39
Registriert: 26.05.2017, 15:25
Dank erhalten: 12 mal
Ich bin: Entwickler/in

Re: Zeichenprüfung

Beitragvon deejey » 16.11.2018, 13:21

regex ist mit den anderen Sprachelementen nicht zu vergleichen, nichts ist auch nur annähernd so kryptisch wie regex, insofern hat man wenig Motivation Sachen "in regex" zu übersetzen wenn man es auch auf herkömmlichen Wege lösen kann, auch wenn es im Vergleich zu dem modernen regex, das es seit den 60ern gibt, altmodisch ist :P
deejey
ForumUser
 
Beiträge: 88
Registriert: 31.07.2016, 11:20
Dank erhalten: 7 mal
Ich bin: Entwickler/in

Re: Zeichenprüfung

Beitragvon DeathAndPain » 16.11.2018, 13:48

Ich weiß nicht, wie der heutige Stand ist, aber ich hatte mal angefangen, mich in ABAP mit regex zu beschäftigen und bin dabei auf Probleme gestoßen, die darin bestanden, dass ABAP nur ein Subset von regex unterstützt. Von daher habe ich regex-Syntaxen ausprobiert, die dann aufgrund dieser Einschränkungen in ABAP nicht funktioniert haben, konnte zugleich aber nirgendwo eine vollständige Doku finden, die beschreibt, welche regex-Elemente ABAP kann und welche nicht. Damit habe ich das irgendwann als halbgaren Mist und Zeitverschwendung abgetan. Und wie Ralf richtig ausgeführt hat, habe ich es auch nie wirklich gebraucht.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
Daniel
DeathAndPain
Expert
 
Beiträge: 778
Registriert: 05.05.2006, 10:14
Dank erhalten: 175 mal
Ich bin: Entwickler/in

Re: Zeichenprüfung

Beitragvon ralf.wenzel » 16.11.2018, 17:52

Vollständig dokumentiert ist das in der ABAP-Hilfe, meine ich mich zu erinnern. Ich bin auch kein Freund davon, es zu verwenden, wenn man es nicht braucht, ABER wenn man mal ein bisschen nachgelesen hat, was für abgefahrene Sachen man damit machen kann, wird man sicher Fälle finden, wo man Regex sehr sinnvoll einsetzen kann. Wenn man häufiger Suchen/Ersetzen auf Zeichenebene macht. Ist halt eher nicht mein Arbeitsgebiet.


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

Re: Zeichenprüfung

Beitragvon deejey » 16.11.2018, 21:15

regexp_replace auf aggregierten Werten in native SQL hat mir mal den Arsch gerettet, war viel schneller und am Ende eleganter als andere Lösungen, aber ganzen Tag damit abgeplagt bis es endlich funktionierte und dutzende Dumps produziert. Es ist vermutlich wie mit den alten linux-Editoren: wer es richtig beherrscht kann damit zaubern, für alle anderen ist es Schinderei :D

Für diese Nachricht hat deejey einen Dank bekommen :
ralf.wenzel
deejey
ForumUser
 
Beiträge: 88
Registriert: 31.07.2016, 11:20
Dank erhalten: 7 mal
Ich bin: Entwickler/in


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

  Aktuelle Beiträge   
Positionstypenverwendung im SD
vor 18 Minuten von SAP_ENTWICKLER 2 Antw.
Hilfe bei SQL Join
vor 11 Stunden von deejey 1 Antw.
Hilfe bei SQL Join
vor 17 Stunden von moo_jo 0 Antw.
LISTBOX: SELECTION-SCREEN
vor 2 Stunden von ewx 3 Antw.
Eine Message in der Taskleiste von alv ausgeben
vor 20 Stunden von ewx 4 Antw.

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

 

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]