Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
ralf.wenzel
Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.Dele hat geschrieben:Bei einer Datei im Excel-könnte dir ggf. der Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE weiterhelfen.
Kann ich nicht sagen. Kann aber gut sein, weil OLE meiner Erfahrung nach immer etwas langsamer ist.Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.
Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
ralf.wenzel
Um eine dynamische interne Tabelle zu erstellen, wird die Anzahl der Spalten gar nicht benoetigt.ralf.wenzel hat geschrieben:Moin,
ich möchte eine Datei vom Client in mein Programm laden, von der ich nicht weiß, wie viele Spalten diese Datei hat. Habe ich eine Chance, vorher die Spaltenzahl irgendwie zu ermitteln? Ich erzeuge dann in meinem Programm eine dynamische itab mit lauter String-Spalten, wo die Datei reinkommt.
Jup, kann ich bestätigen. Zum Einlesen von 1230 Zeilen braucht das etwa 5-15 Sekunden meiner Erfahrung nach.ralf.wenzel hat geschrieben:Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.Dele hat geschrieben:Bei einer Datei im Excel-könnte dir ggf. der Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE weiterhelfen.
Oder hat mir da jemand Quatsch erzählt?
Wie wäre es denn mit einem pragmatischen Ansatz? Migrationsdateien die mir bisher untergekommen sind können ja mitunter durchaus einiges an Spalten mitbringen - aber i.A. kann man doch die Spaltenanzahl nach oben begrenzen. Und wenn dir jemand glaubhaft versichert, dass die breiteste Datei mit 80 Spalten daherkommt baust du dir halt eine Inputstruktur mit 100 Spalten - da passt immer alles rein.ralf.wenzel hat geschrieben:Moin,
ich möchte eine Datei vom Client in mein Programm laden, von der ich nicht weiß, wie viele Spalten diese Datei hat. Habe ich eine Chance, vorher die Spaltenzahl irgendwie zu ermitteln? Ich erzeuge dann in meinem Programm eine dynamische itab mit lauter String-Spalten, wo die Datei reinkommt.
Code: Alles auswählen.
FIELD-SYMBOLS: <upload_tab> TYPE STANDARD TABLE.
LOOP AT lt_uploadtab INTO ls_uploadtab.
IF sy-tabix EQ 1. "Header line
PERFORM create_dynamic_internal_table USING ls_uploadtab.
CONTINUE.
ENDIF.
CLEAR lt_headerline_fieldname.
SPLIT ls_uploadtab AT con_semicolon INTO TABLE lt_headerline_fieldname.
**** fill dynamic created table <upload_tab> with contains, line by line
APPEND INITIAL LINE TO <upload_tab> ASSIGNING <upload_str>.
LOOP AT lt_headerline_fieldname ASSIGNING <headerline_fieldname>.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <upload_str> TO <comp>.
MOVE <headerline_fieldname> TO <comp>.
ENDLOOP.
ENDLOOP.
************* FORM CREATE.......
FORM create_dynamic_internal_table USING us_uploadtab.
DATA: lt_headerline_fieldname TYPE STANDARD TABLE OF string,
lt_fcat TYPE lvc_t_fcat,
lt_dyn_table TYPE REF TO data.
FIELD-SYMBOLS: <headerline_fieldname> TYPE string,
<ls_fcat> TYPE LINE OF lvc_t_fcat.
***
TRANSLATE us_uploadtab TO UPPER CASE.
SPLIT us_uploadtab AT con_semicolon INTO TABLE lt_headerline_fieldname.
LOOP AT lt_headerline_fieldname ASSIGNING <headerline_fieldname>.
APPEND INITIAL LINE TO lt_fcat ASSIGNING <ls_fcat>.
CONDENSE <headerline_fieldname> NO-GAPS.
<ls_fcat>-fieldname = <headerline_fieldname>.
<ls_fcat>-datatype = con_strg. "Datatype STRING
ENDLOOP.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fcat
IMPORTING
ep_table = lt_dyn_table.
ASSIGN lt_dyn_table->* TO <upload_tab>.
ENDFORM.
Hast du einen anderen ITS_UPLOAD als ich?ewx hat geschrieben:In der Methode cl_gui_frontend_services=>upload wird jedoch der Baustein GUI_UPLOAD verwendet, der den ITS_UPLOAD verwendet, der die Parameter noch hat...