Komma etc. in Tabulator in int. Tabelle konvertieren

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Komma etc. in Tabulator in int. Tabelle konvertieren

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
Hallo zusammen,
ich hab lange gesucht aber keine Antwort hier im Forum gefunden.
Ich lese eine Textdatei ein, getrennt mit Trennzeichen wie Komma, Semikolon etc. in eine int. Tabelle ein. Dies geschieht mit der Klasse cl_gui_frontend_services. Leider kann diese keine Trennzeichen konvertieren.
Somit brauche ich eine Möglichkeit, die Trennzeichen in der int. Tabelle durch Tabulator zu ersetzen.
Schön wäre es wenn die Konvertierung schon beim Import ginge aber eine nachträgliche Konvertierung ist auch ok.
Hat jemand einen Tipp für mich?

Danke im Voraus.
Der Macler.

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


Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
hi,

versuch's aml so:

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.
a s
s oon
a s
p ossible
h elp
http://www.clv.de/

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
Hey zurück,
ich habe gemerkt dass mein Ansatz schon falsch ist. Ich brauche die importierten Datensätze ja schon in der int. Tabelle in dem richtigen TAB-Format. Es nützt mir nix wenn ich importiere und dann erst die Trennzeichen ersetze.
Als Ergebnis brauche ich für jede Zeile im Importdokument eine Zeile in der int. Tabelle und für jede Spalte im Importdokument eine Spalte in der int. Tabelle. Also so z.B.
Spalte1 Spalte2 Spalte3
1 11 111
2 22 222
etc.

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
macler hat geschrieben: Ich brauche die importierten Datensätze ja schon in der int. Tabelle in dem richtigen TAB-Format.
Lies die Daten mit cl_gui_frontend_services=>gui_upload mit read_by_line = 'X' in eine Tabelle des types String ein.

Dann:

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.
Jetzt hast du die Daten gesplittet in itab_datensatz.
Gruß Hendrik

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
Danke Hendrik,
mußte das Coding etwas anpassen aber es läuft und das Prinzip ist mir auch klar.
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.
Da hab ich noch gar keinen Plan wie das gehen soll.

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
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.
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.

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ß.
Gruß Hendrik

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
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ß.
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?

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
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?
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.

Frei aus dem Kopf, ohne jetzt die Syntax geprüft zu haben:

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.
Gruß Hendrik

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
Danke für die schnelle Antwort.
Ih hab mir Dein Coding mal durchgelesen, kann aber folgendes nicht verstehen:
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?
Sorry, aber mit der Dynamik hab ich noch meine Verständnisprobleme.

Gruß,
der Macler.

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
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?
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.
Gruß Hendrik

Beitrag von macler (ForumUser / 11 / 0 / 0 ) »
Guten Morgen.

OK, das hab ich verstanden. Aber könnte man die generische Bestimmung der Struckturfelder auch per Hand bestimmen indem man ausliest wieviel Trennzeichen in der ersten Zeile vorkommen und danach die Menge der Strukturkomponenten zu bestimmen?
Viele Grüße,
der Macler.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
531
Views
XML-Tabelle von Typ x in Typ c oder string konvertieren
von GerryRe » 28.10.2020 17:35 • Verfasst in ABAP® für Anfänger
7
Antw.
2689
Views
Konvertieren einer internen Tabelle und Ablage auf dem KPro
von loskochos » 06.01.2006 21:43 • Verfasst in ABAP® Core
1
Antw.
8192
Views
Komma & Punkt bei Convertierung
von RiffRaff » 10.03.2005 16:50 • Verfasst in ABAP® Core
12
Antw.
5883
Views
Zeichenkette nach komma holen
von derkano » 22.06.2011 22:48 • Verfasst in ABAP® für Anfänger
9
Antw.
14750
Views
Komma durch Punkt ersetzen
von Barney » 14.07.2015 11:16 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 72
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141