Lerne und übe ABAP – Telefon Nummer

Lerne und übe ABAP. In der ABAP-Übung „Phone Number“ implementierst Du ein ABAP-Programm, um eingegebene Telefonnummern zu bereinigen. Es gibt 40 geniale ABAP Übungen auf exercism. Du kannst diese Übung entweder in Deinem SAP-System ausprobieren oder Dich kostenlos auf der Plattform anmelden und die Übung absolvieren. Du kannst Dir sogar Lösungen von anderen Nutzen ansehen und dadurch Deine Lösung vergleichen.

Aufgabenstellung

Bereinige vom Benutzer eingegebene Telefonnummern, damit sie als SMS versendet werden können.

Der North American Numbering Plan (NANP) ist ein Telefonnummernsystem, das von vielen Ländern in Nordamerika wie den Vereinigten Staaten, Kanada oder Bermuda verwendet wird. Alle NANP-Länder haben dieselbe internationale Landesvorwahl: 1.

NANP-Nummern sind zehnstellige Nummern, die aus einer dreistelligen Nummerierungsplan-Vorwahl, allgemein bekannt als Ortsvorwahl, gefolgt von einer siebenstelligen Ortsnummer bestehen. Die ersten drei Ziffern der Ortsnetzkennzahl stellen die Vorwahl dar, gefolgt von der vierstelligen eindeutigen Teilnehmernummer.

Das Format lautet in der Regel

(NXX)-NXX-XXXX

wobei N für eine beliebige Ziffer von 2 bis 9 und X für eine beliebige Ziffer von 0 bis 9 steht.

Deine Aufgabe ist es, unterschiedlich formatierte Telefonnummern zu bereinigen, indem du Satzzeichen und die Landesvorwahl (1) entfernst, falls vorhanden.

Zum Beispiel die Eingaben

  • +1 (613)-995-0253
  • 613-995-0253
  • 1 613 995 0253
  • 613.995.0253

sollten alle die folgende Ausgabe erzeugen

6139950253

Hinweis: Da es in dieser Übung nur um Telefonnummern geht, die in NANP-Ländern verwendet werden, wird nur 1 als gültige Ländervorwahl betrachtet.

Beispiel Programmierung

CLASS zcl_phone_number DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    METHODS clean
      IMPORTING
        !number       TYPE string
      RETURNING
        VALUE(result) TYPE string
      RAISING
        cx_parameter_invalid.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_phone_number IMPLEMENTATION.

  METHOD clean.
    number = replace( val = number regex = '\W' with = '' occ = 0 ).
    
    CONDENSE number NO-GAPS.
    
    DATA(lv_length) = strlen( number ).
    
    IF lv_length <= 9 OR lv_length > 11 OR
       ( lv_length = 11 AND number(1) <> '1' ).
      RAISE EXCEPTION TYPE cx_parameter_invalid.
    ENDIF.
    
    IF number CO '0123456789'.
    
      IF lv_length = 10.
        DATA(lv_plan_area_code) = number(3).
        DATA(lv_exchange_code) = number+3(lv_length).
      ELSEIF lv_length = 11.
        lv_plan_area_code = number+1(3).
        lv_exchange_code = number+4(lv_length).
      ENDIF.
    
      IF lv_plan_area_code(1) CO '01' OR 
         lv_exchange_code(1) CO '01'.
        RAISE EXCEPTION TYPE cx_parameter_invalid.
      ENDIF.
    ELSE.
      RAISE EXCEPTION TYPE cx_parameter_invalid.
    ENDIF.
    
    IF lv_length = 11 AND number(1) = '1'.
      lv_length = lv_length - 1.
      number = number+1(lv_length).
    ENDIF.
    result = number.
  ENDMETHOD.
ENDCLASS.

Erklärung

Die Methode clean nimmt eine Zeichenkette als Eingabe und gibt eine bereinigte Telefonnummer zurück.

Zuerst werden alle nicht-numerischen Zeichen aus der Eingabezeichenkette entfernt, indem die Methode replace mit regulären Ausdrücken verwendet wird. Danach werden alle Leerzeichen aus der Zeichenkette mit der Methode CONDENSE entfernt.

Als nächstes wird geprüft, ob die Länge der Zeichenkette 10 oder 11 ist und ob bei einer Länge von 11 das erste Zeichen „1“ ist. Ist dies nicht der Fall, wird die Ausnahme cx_parameter_invalid geworfen.

Anschließend wird geprüft, ob der String nur aus Zahlen besteht. Ist dies nicht der Fall, wird eine Ausnahme cx_parameter_invalid geworfen.

Zuletzt wird geprüft, ob das erste Zeichen des ersten Teils des Strings (Präfix) oder des zweiten Teils (Exchange-Code) „0“ oder „1“ ist. Ist dies der Fall, wird eine Ausnahme cx_parameter_invalid geworfen.

Wenn das erste Zeichen bei einer Länge von 11 „1“ ist, wird es aus dem String entfernt und das Ergebnis ist der bereinigte String.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar