login as:
~/abapcraft.dev — code, crafted in SAP
florin@abapcraft:~/abap/posts/exercism-abap/src/zcl_itab_basics.clas.abap $ cat zcl_itab_basics.clas.abap
exercism-abap / src / zcl_itab_basics.clas.abap
ABAP 76 lines
CLASS zcl_itab_basics DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .


  PUBLIC SECTION.
    TYPES group TYPE c LENGTH 1.
    TYPES: BEGIN OF initial_type,
             group       TYPE group,
             number      TYPE i,
             description TYPE string,
           END OF initial_type,
           itab_data_type TYPE STANDARD TABLE OF initial_type WITH EMPTY KEY.

    METHODS fill_itab
      RETURNING
        VALUE(initial_data) TYPE itab_data_type.

    METHODS add_to_itab
      IMPORTING initial_data        TYPE itab_data_type
      RETURNING
                VALUE(updated_data) TYPE itab_data_type.

    METHODS sort_itab
      IMPORTING initial_data        TYPE itab_data_type
      RETURNING
                VALUE(updated_data) TYPE itab_data_type.

    METHODS search_itab
      IMPORTING initial_data        TYPE itab_data_type
      RETURNING
                VALUE(result_index) TYPE i.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_itab_basics IMPLEMENTATION.
  METHOD fill_itab.
    initial_data = VALUE #(
      ( group = 'A' number = 10  description = 'Group A-2' )
      ( group = 'B' number = 5   description = 'Group B' )
      ( group = 'A' number = 6   description = 'Group A-1' )
      ( group = 'C' number = 22  description = 'Group C-1' )
      ( group = 'A' number = 13  description = 'Group A-3' )
      ( group = 'C' number = 500 description = 'Group C-2' )
     ).
  ENDMETHOD.

  METHOD add_to_itab.
    updated_data = initial_data.
    APPEND VALUE initial_type( group = 'A' number = 19 description = 'Group A-4' ) TO updated_data.
  ENDMETHOD.

  METHOD sort_itab.
    updated_data = initial_data.
    SORT updated_data BY group ASCENDING number DESCENDING.
  ENDMETHOD.

  METHOD search_itab.
    DATA(temp_data) = initial_data.

    TRY.
        DATA(searched_index) = line_index( temp_data[ number = 6 ] ).
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    result_index = searched_index.
  ENDMETHOD.

ENDCLASS.