Datei hochladen, Spaltenzahl unbekannt

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
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.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
Es gab in dem alten Hochlade-Funktionsbaustein WS_UPLOAD die Möglichkeit, die Datei Zeile für Zeile zu lesen (Parameter USER_FORM, USER_PROG).
Leider ist er jedoch erstens obsolet und zweitens hat er ein Problem mit der Dateinamenlänge (max 128 Zeichen).

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... 8)

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
ralf.wenzel


Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Ich mache das immer so, dass ich die Datei in eine interne Tabelle mit Zeilentyp String hochlade.
Vorraussetzung dafür ist:
alle Zeilen haben den gleichen Aufbau (gleiche Anzahl von Spalten)
es handelt sich um eine flache Text-Datei und der Spaltentrenner ist bekannt (üblichweise Strichpunkt oder Tab)

Dann analysiere ich die erste Zeile und reagiere entsprechende. (Split at Spaltentrenner usw.)

Bei einer Datei im Excel-könnte dir ggf. der Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE weiterhelfen.

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Dele hat geschrieben:Bei einer Datei im Excel-könnte dir ggf. der Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE weiterhelfen.
Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.

Oder hat mir da jemand Quatsch erzählt?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.
Kann ich nicht sagen. Kann aber gut sein, weil OLE meiner Erfahrung nach immer etwas langsamer ist.
Aber du kannst mit diesem Funktionsbaustein auch nur die erste Zeile einlesen, in der Hoffnung dass das nicht solange dauert.
Dann hättest du zumindest die Anzahl Spalten.
Wie du dann die Daten performant weiterverarbeiten kannst ohne OLE, weiß ich nicht. Ggf. dieses Open Source ABAP Excel Tool (gibt's im SCN).

Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
ralf.wenzel


Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
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.
Um eine dynamische interne Tabelle zu erstellen, wird die Anzahl der Spalten gar nicht benoetigt.

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
ralf.wenzel hat geschrieben:
Dele hat geschrieben:Bei einer Datei im Excel-könnte dir ggf. der Funktionsbaustein ALSM_EXCEL_TO_INTERNAL_TABLE weiterhelfen.
Das Ding soll bei sehr großen Dateien (diesen Fall haben wir hier, Migration) ziemlich rumzicken. Zumindest, was die Laufzeit angeht.

Oder hat mir da jemand Quatsch erzählt?
Jup, kann ich bestätigen. Zum Einlesen von 1230 Zeilen braucht das etwa 5-15 Sekunden meiner Erfahrung nach.
Gruß,
der Matze

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
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.
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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Hallo Stefan,

ich baue ein Migrationsframework. Wer weiß, wie breit die Dateien in 5 Jahren sind? Bei der aktuellen Migration sind es knapp 120....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Ja und? Dann nimm jetzt 160 Spalten - und wenn ich 5 Jahren da tatsächlich mehr Spalten ankommen dann setzt sich jemand für 3 Minuten dran und stellt deine Uploadstruktur um...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Da lese ich lieber die ersten Zeilen, um die Breite zu ermitteln, dann bin ich auf der sicheren Seite ;)

Jede feste Spaltenzahl kann dazu führen, dass Daten fehlen. Bis dann jemand darauf kommt, dass dem so ist und mein Nachfolger dann an dieser Stelle guckt, bemerkt und ändert....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Mir ist immer noch nicht klar, wozu man die Anzahl der Spalten fuer eine dynamische interne Tabelle benoetigt???

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Damit ich die Datei da reinpacken kann. Denn dafür brauche ich eine Tabelle, die mindestens so viele Spalten hat wie die Datei.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Hat die Datei in der ersten Zeile die Spaltennamen?

Wie ist sind die Spalten getrennt? Tab? Semikolon?

(Angepasstes..) Beispiel fuer eine Textdatei getrennt durch Semikolon mit Spaltenname in der ersten Zeile:
Hier braucht man keine Anzahl der Spalten.

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.


Re: Datei hochladen, Spaltenzahl unbekannt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
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... 8)
Hast du einen anderen ITS_UPLOAD als ich?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Vergleichbare Themen

4
Antw.
2380
Views
Datei hochladen
von mamba » 02.02.2006 14:25 • Verfasst in ABAP® für Anfänger
1
Antw.
2336
Views
Gui-Upload - unicode datei hochladen
von Tigermoon » 12.01.2006 15:10 • Verfasst in Dialogprogrammierung
1
Antw.
1911
Views
große Excel Datei hochladen
von Kaiwalker » 17.05.2006 14:59 • Verfasst in ABAP® Core
4
Antw.
5296
Views
Excel-Datei hochladen nach SAP
von RainerW » 15.03.2016 14:01 • Verfasst in ABAP® Core
1
Antw.
4846
Views
Feld unbekannt
von bohne » 22.02.2006 10:31 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 785
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2402
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8986