Code: Alles auswählen.
DATA x1 TYPE xstring.
DATA x2(1) TYPE x VALUE '09'.
DATA x3 TYPE xstring.
CONCATENATE ';' space INTO x1.
CONCATENATE x1 x2 INTO x3.
LOOP AT itab INTO str.
TRANSLATE str USING x3.
ENDLOOP.
Lies die Daten mit cl_gui_frontend_services=>gui_upload mit read_by_line = 'X' in eine Tabelle des types String ein.macler hat geschrieben: Ich brauche die importierten Datensätze ja schon in der int. Tabelle in dem richtigen TAB-Format.
Code: Alles auswählen.
LOOP AT itab_string.
SPLIT itab_string AT ';' INTO itab_datensatz-zelle_1
itab_datensatz-zelle_2
itab_datensatz-zelle_3
...
itab_datensatz-zelle_n.
APPEND itab_datensatz.
ENDLOOP.
Schau dir mal die F1-Hilfe zu SPLIT an, es gibt ein Variante in der die Spalten nicht in einzelnen Felder gestellt werden, sondern in einer Tabelle zurückgegeben werden. Jede Spalte wird zu einer Zeile dieser Tabelle.macler hat geschrieben:Aber wie mache ich das Ganze jetzt dynamisch. Das heißt ich müßte erkennen wieviele Spalten das Importdokument hat und dementsprechend muß die int. Tabelle angelegt und die Daten importiert werden.
Das mit dem Spilt in die int. Tabelle habe ich hinbekommmen, aber mit den FS hab ich noch nie was gemacht. Kannst Du mir sagen wie ich die FS richtig anlege und typisiere sodass sie sich an die Tabelleneinträge in der int. Tabelle anpasst?JHM hat geschrieben:macler hat geschrieben: Diese Tabelle-zeilen kann man dynamisch mit FIELD-SYMBOLES in eine neue Tabelle bringen. Hierzu ist das F1-Stichwort ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_wa> TO <fs_col>.
Wenn die Tabelle in die du improtieren willst auch noch dynamisch erzeugen willst, schau dir den Befehl CREAT DATA an, damit kannst du eine interne Tabelle erzeugen.
Wie man einen Tabellentyp dynamisch erzeugt weiß ich nicht. Evtl. über einen generierten SUBROUTINE POOL. Aber wer weiß.
Hm in der Hilfe das doch eigentlich mehr als gut erklärt. Ich habe mir das auch durch lesen und probieren an geeignet. Aber was soll.macler hat geschrieben: Kannst Du mir sagen wie ich die FS richtig anlege und typisiere sodass sie sich an die Tabelleneinträge in der int. Tabelle anpasst?
Code: Alles auswählen.
* Typdefinition für Fieldsymbols und Datentabelle
TYPES: BEGIN OF t_tab,
feld1(10) type c,
feld2(20) type c,
feld3(30) type c,
END OF t_tab.
* Tabelle/Arbeitsbereich die Daten auf nimmt
DATA: gt_tab TYPE TABLE OF t_tab,
gw_tab TYPE t_tab.
* Tabelle/Arbeitsbereich für den Dateiinhalt
DATA: gt_file TYPE TABLE OF string,
gw_file TYPE string.
* Tabelle/Arbeitsbereich für den Split
DATA: gt_split TYPE TABLE OF string,
gw_split TYPE string.
* Field-Symboles um die Daten in die Daten-Tab zu bringen
FIELD-SYMBOLES <wa> TYPE t_tab,
<comp> TYPE ANY. "Es kann jede Komponente kommen
** Hier das File zeilenweise einlesen
* das klappt ja
** Eingelesene Zeilen in Datentab bringen
LOOP AT gt_file INTO gw_file.
* Splittabelle initialisieren:
REFRESH gt_split.
* Splitten
SPLIT gw_file AT ';' INTO TABLE gt_split.
** Die SPLIT-Tabelle in die Datentabellenzeile umsetzten
* Daten initialisieren
CLEAR gw_data.
ASSIGN gw_data TO <wa>.
* Jedes Feld in die DataTab übernehmen
LOOP AT gt_split INTO gw_split.
* Das nte-Feld dem Feldsymbol zuweisen (n = Zähler der Schleife)
ASSIGN COMPONENT sy-tabix OF STRUCTURE <wa> TO <comp>.
* Wert übernehmen
<comp> = gw_split.
ENDLOOP.
* Hier ist die Datenzeile fertig aufgebaut, diese übernehmen
APPEND gw_data TO gt_data.
* Alternativ ginge auch
* APPEND <wa> TO gt_data.
ENDLOOP.
t_tab ist der Typ der Itab in dem am Schluss die Daten des Files stehen. Bei dieser Lösung muss man also vorher wissen, wie das File aufgebaut ist. Wenn dieser Typ auch noch dynamisch sein soll muss ich passen.macler hat geschrieben:Du erstellst eine Struktur mit 3 Feldern t_tab. Dadurch ist doch die Struktur von der Tabelle, in der zum Schluß die n-Einträge stehen sollen schon vorgegeben, oder nicht?