Der erste Anlaufpunkt für solche Probleme ist immer die F1-Hilfe im Editor.huckb hat geschrieben:Nun stehe ich vor dem Problem und habe keine Ahnung wie weiter.
Vollgst du dann dem Zusatz result wirst du auf INTO wa [transport_options] stoßen, dort ist dann alles beschrieben.F1 hat geschrieben: READ TABLE itab { table_key
| free_key
| index } result.
Code: Alles auswählen.
READ TABLE lt_table ASSIGNING <ls_line> INDEX 1.
* bzw.
LOOP AT lt_table ASSIGNING <ls_line>.
Code: Alles auswählen.
DATA: lt_flight TYPE flighttab. "<-- Tabellentyp
FIELD-SYMBOLS: <ls_line> TYPE LINE OF flighttab."<-- Zeile eines Tabellentyps
Code: Alles auswählen.
DATA: lt_flight TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY. "<-- Tabellentyp einer Struktur
FIELD-SYMBOLS: <ls_line> TYPE sflight. "<-- Struktur
Code: Alles auswählen.
DATA: lt_flight TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY. "<-- Tabellentyp einer Struktur
FIELD-SYMBOLS: <ls_line> LIKE LINE OF lt_flight. "<-- Zeile einer tabellarischen Variable
Guten Abend adt,a-dead-trousers hat geschrieben:...Wobei zwar die LIKE Variante am flexibelsten ist, aber leider auch auf der "zu vermeiden" Liste steht, weil es zur Laufzeit interpretiert werden muss und daher imperformant ist.Code: Alles auswählen.
DATA: lt_flight TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY. "<-- Tabellentyp einer Struktur FIELD-SYMBOLS: <ls_line> LIKE LINE OF lt_flight. "<-- Zeile einer tabellarischen Variable
...
1.) Okay, ich geb zu der zusätzliche Interpretationsaufwand wird bei wenigen Aufrufen (z.B. eines Unterprogramms) nicht ins Gewicht fallen. Aber wenn man einen LOOP mit vielen Einträgen hat und innerhalb davon ein Unterprogramm aufruft das einen mit LIKE definierten Datentyp beinhaltet, dürfte sich das schon messbar auswirken. Aber um schon gar nicht in diese Problematik hinein zu stolpern, habe ich mir das LIKE so weit wie möglich abgewöhnt.black_adept hat geschrieben:1.) Kannst du (in etwa) beziffern wie stark sich dieses Konstrukt gegenüber der "type"-Version im Laufzeitverhalten verschlechtert. Vor allem interessiert mich, ob die Verlangsamung tatsächlich signifikant/messbar ist und den Lesbarkeitsgewinn aufwiegt.
2.) In dem obigen Beispiel sollte ein "guter" Compiler zumindest theoretisch in der Lage sein auch schon vor Beginn der Laufzeit die Typauflösung vorzunehmen. Kannst du die Quelle nennen, wo du diese "wird zur Laufzeit interpretiert"-Information her hast. Denn irgendwie hatte ich so was auch noch im Hinterkopf bin mir aber schon länger nicht mehr sicher ob das in aktuellen Kernels überhaupt noch gilt.
Code: Alles auswählen.
REPORT.
data: gt_mara type STANDARD TABLE OF mara with NON-UNIQUE DEFAULT KEY,
gt_marc type STANDARD TABLE OF marc with NON-UNIQUE DEFAULT KEY.
FIELD-SYMBOLS: <mara1> type mara,
<mara2> like line of gt_mara.
FIELD-SYMBOLS: <marc1> type marc,
<marc2> like line of gt_marc.
append INITIAL LINE TO gt_mara ASSIGNING <mara1>.
append INITIAL LINE TO gt_mara ASSIGNING <mara2>.
append INITIAL LINE TO gt_mara ASSIGNING <marc1>.
append INITIAL LINE TO gt_mara ASSIGNING <marc2>.
Code: Alles auswählen.
REPORT.
DATA: gs_t000 TYPE t000,
gv_counter TYPE i,
gv_start TYPE i,
gv_ende TYPE i,
gv_time TYPE i.
gv_counter = 1.
DO 8 TIMES.
GET RUN TIME FIELD gv_start.
DO gv_counter TIMES.
PERFORM test1 CHANGING gs_t000.
ENDDO.
GET RUN TIME FIELD gv_ende.
gv_time = gv_ende - gv_start.
WRITE:/ gv_counter,'Def. via TYPE', gv_time.
GET RUN TIME FIELD gv_start.
DO gv_counter TIMES.
PERFORM test2 CHANGING gs_t000.
ENDDO.
GET RUN TIME FIELD gv_ende.
gv_time = gv_ende - gv_start.
WRITE: at 40 'Def. via LIKE', gv_time.
MULTIPLY gv_counter BY 10.
ENDDO.
*&---------------------------------------------------------------------*
*& Form TEST1
*&---------------------------------------------------------------------*
FORM test1 CHANGING p_data TYPE t000.
FIELD-SYMBOLS: <fs> TYPE t000.
ASSIGN p_data TO <fs>.
ENDFORM. " TEST1
*&---------------------------------------------------------------------*
*& Form TEST1
*&---------------------------------------------------------------------*
FORM test2 CHANGING p_data TYPE t000.
FIELD-SYMBOLS: <fs> LIKE p_data.
ASSIGN p_data TO <fs>.
ENDFORM. " TEST1
Code: Alles auswählen.
1 Def. via TYPE 6 Def. via LIKE 6
10 Def. via TYPE 9 Def. via LIKE 9
100 Def. via TYPE 64 Def. via LIKE 66
1.000 Def. via TYPE 699 Def. via LIKE 676
10.000 Def. via TYPE 6.754 Def. via LIKE 6.651
100.000 Def. via TYPE 68.661 Def. via LIKE 65.965
1.000.000 Def. via TYPE 676.409 Def. via LIKE 649.990
10.000.000 Def. via TYPE 6.637.538 Def. via LIKE 6.592.154