Lerne und übe ABAP – Kodierung der Lauflänge

Übe ABAP mit der ABAP-Übung „Run Length Encoding“. Hier implementierst Du ein ABAP-Programm zum Komprimieren und Dekomprimieren von Daten mittels Lauflängenkodierung. Auf der Plattform exercism stehen dir 40 anspruchsvolle ABAP-Übungen zur Verfügung. Du hast die Möglichkeit, diese Übungen entweder direkt in Deinem SAP-System oder kostenlos auf der Plattform durchzuführen. Nutze die Gelegenheit, die Lösungen anderer Teilnehmer zu vergleichen und so Dein eigenes Verständnis zu vertiefen.

Aufgabenstellung

Implementierung der Lauflängenkodierung und -dekodierung.

Die Lauflängenkodierung (RLE) ist eine einfache Form der Datenkomprimierung, bei der Läufe (aufeinanderfolgende Datenelemente) durch nur einen Datenwert und eine Zählung ersetzt werden.

Zum Beispiel können wir die ursprünglichen 53 Zeichen mit nur 13 darstellen.

"WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"  ->  "12WB12W3B24WB"

RLE ermöglicht die perfekte Rekonstruktion der Originaldaten aus den komprimierten Daten und ist damit eine verlustfreie Datenkomprimierung.

"AABCCCDEEEE"  ->  "2AB3CD4E"  ->  "AABCCCDEEEE"

Der Einfachheit halber kannst Du davon ausgehen, dass die nicht kodierte Zeichenkette nur die Buchstaben A bis Z (entweder Klein- oder Großbuchstaben) und Leerzeichen enthalten wird. Auf diese Weise enthalten die zu kodierenden Daten niemals Zahlen, und die Zahlen in den zu dekodierenden Daten stellen immer die Zählung für das folgende Zeichen dar.

Beispiel Programmierung

CLASS zcl_rle DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    METHODS encode IMPORTING input         TYPE string
                   RETURNING VALUE(result) TYPE string.

    METHODS decode IMPORTING input         TYPE string
                   RETURNING VALUE(result) TYPE string.

ENDCLASS.


CLASS zcl_rle IMPLEMENTATION.

  METHOD encode.
    CONSTANT lc_regex TYPE string value '(^.)\1{0,}'.
    DATA: lv_word   TYPE string,
          lv_offset TYPE i,
          lv_len TYPE i.

      lv_word = input.

     DO.
      IF strlen( lv_word ) > 0.
         FIND REGEX lc_regex IN lv_word 
              MATCH offset lv_offset 
              MATCH length lv_len.
          DATA(lv_repeat) = COND string( WHEN lv_len > 1 THEN lv_len ELSE '' ).
          CONDENSE lv_repeat NO-GAPS.
          result = |{ result }{ lv_repeat }{ lv_word(1) }|.
          SHIFT lv_word BY lv_len PLACES.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
  ENDMETHOD.

  METHOD decode.
    CONSTANT lc_regex TYPE string value '^[0-9]{1,}'.
    DATA: lv_len  TYPE i,
          lv_occ     TYPE i.
    
    DATA(lv_word) = input.
    DO.
      if strlen( lv_word ) > 0.
         FIND REGEX lc_regex IN lv_word 
              MATCH length lv_len.
          IF sy-subrc IS INITIAL.
            lv_occ = lv_word(lv_len).
          ELSE.
            lv_occ = 1.
          ENDIF.
          SHIFT lv_word BY lv_len PLACES.
          result = result && repeat( val = lv_word(1) occ = lv_occ ).
          SHIFT lv_word BY 1 PLACES.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.
  ENDMETHOD.

ENDCLASS.

Erklärung

Die Methoden encode und decode sind Teil der ABAP-Klasse zcl_rle.

Die Methode encode dient zur Kodierung einer Eingabezeichenkette in eine Lauflängenkodierung. Dabei wird geprüft, wie oft ein bestimmtes Zeichen hintereinander vorkommt und diese Häufigkeit als Zahl vor dem Zeichen gespeichert. Wenn ein Zeichen nicht mehrmals hintereinander vorkommt, wird es ohne Angabe der Häufigkeit gespeichert.

Die Methode decode dient dazu, einen codierten String wieder in seine ursprüngliche Form zu decodieren. Dabei wird geprüft, ob vor einem Zeichen eine Zahl steht, die die Häufigkeit des Zeichens angibt. Wird eine Zahl gefunden, wird das Zeichen entsprechend oft hintereinander angehängt. Ist keine Zahl vorhanden, wird das Zeichen einmal hintereinander angehängt.

Ü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