For every Auftrag, there are multiple Position entries.
Rest of the blocks don't seems to have any relation.
So you can check this code to see how internal table lt_str is built whose first 3 fields have data contained in Auftrag, and next 3 fields have Position data. The structure is flat, assuming that every Position record is related to preceding Auftrag.
Try out this snippet.
- DATA lt_data TYPETABLEOF string.
- DATA lv_data TYPE string.
- CALLMETHOD cl_gui_frontend_services=>gui_upload
- EXPORTING
- filename = 'C:\temp\test.txt'
- CHANGING
- data_tab = lt_data
- EXCEPTIONS
- OTHERS = 19.
- CHECK sy-subrc EQ0.
- TYPES:
- BEGINOF ty_str,
- a1 TYPE string,
- a2 TYPE string,
- a3 TYPE string,
- p1 TYPE string,
- p2 TYPE string,
- p3 TYPE string,
- ENDOF ty_str.
- DATA: lt_str TYPETABLEOF ty_str,
- ls_str TYPE ty_str,
- lv_block TYPE string,
- lv_flag TYPE boolean.
- LOOPAT lt_data INTO lv_data.
- CASE lv_data.
- WHEN'[Version]'OR'[StdSatz]'OR'[Arbeitstag]'OR'[Pecunia]'
- OR'[Mita]'OR'[Kunde]'OR'[Auftrag]'OR'[Position]'.
- lv_block = lv_data.
- lv_flag = abap_false.
- WHENOTHERS.
- lv_flag = abap_true.
- ENDCASE.
- CHECK lv_flag EQ abap_true.
- CASE lv_block.
- WHEN'[Auftrag]'.
- SPLIT lv_data AT';'INTO ls_str-a1 ls_str-a2 ls_str-a3.
- WHEN'[Position]'.
- SPLIT lv_data AT';'INTO ls_str-p1 ls_str-p2 ls_str-p3.
- APPEND ls_str TO lt_str.
- ENDCASE.
- ENDLOOP.
/.