interne Tabelle in andere interne Tabelle (Format)

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

interne Tabelle in andere interne Tabelle (Format)

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

folgendes Problem: Ich habe eine Tabelle itab (mit Spalten row, col und value). Diese soll nun in eine andere Form gebracht werden. Gerichtet wird sich dabei an den Wert, der in itab bei col steht. Sprich am Ende soll ebenfalls eine interne Tabelle herauskommen, die nicht nach row und col sortiert ist, sondern den Aufbau spalte1, spalte2, ... hat. So folgenden Code habe ich:

Code: Alles auswählen.

REPORT  z_einlesen_2.

DATA: itab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: wa_itab LIKE LINE OF itab.

TYPES: BEGIN OF t_record,
          spalte1 LIKE alsmex_tabline-value,
          spalte2 LIKE alsmex_tabline-value,
          spalte3 LIKE alsmex_tabline-value,
          spalte4 LIKE alsmex_tabline-value,
       END OF t_record.

DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,
      wa_record TYPE t_record.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  EXPORTING
    filename = 'C:\Test\Input.xls'
    i_begin_col             = '1'
    i_begin_row             = '1'
    i_end_col               = '4'
    i_end_row               = '10'
  TABLES
    intern                  = itab
* EXCEPTIONS
*   INCONSISTENT_PARAMETERS = 1
*   UPLOAD_OLE              = 2
*   OTHERS                  = 3
          .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

LOOP AT itab.

  AT NEW row.
    APPEND wa_record TO it_record.
  ENDAT.

  CASE itab-col.
    WHEN 1.
      wa_record-spalte1 = itab-value.
    WHEN 2.
      wa_record-spalte2 = itab-value.
    WHEN 3.
      wa_record-spalte3 = itab-value.
    WHEN 4.
      wa_record-spalte4 = itab-value.
  ENDCASE.

ENDLOOP.

APPEND wa_record TO it_record.

LOOP AT it_record INTO wa_record.
  WRITE: / sy-tabix, wa_record-spalte1, 35 wa_record-spalte2, 55
wa_record-spalte3, 75 wa_record-spalte4.
ENDLOOP.
Wie ihr seht, lese ich eine Excel-Tabelle ein, aber das tut hier nichts zur Sache, weil das nämlich funktioniert.

Mein Problem an diesem Code ist, dass bei der Ausgabe in der letzten Schleife eine oberste Zeile mitausgegeben wird, die da nichts zu suchen hat.
Es liegt wahrscheinlich an dem wa_record in dem AT/ENDAT-Bereich, weil dieser zu diesem Zeitpunkt leer ist.
Kann mich jemand bestätigen und mir einen Tipp geben, wie ich die Zeile wegbekomme?
danke

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


Beitrag von Gast ( / / 0 / 3 ) »
Dafür wird die letzte Zeile "vergessen".
statt

Code: Alles auswählen.

  AT NEW row. 
    APPEND wa_record TO it_record. 
  ENDAT.
nach LOOP AT ...

Code: Alles auswählen.

  AT END OF row. 
    APPEND wa_record TO it_record. 
  ENDAT.
vor ENDLOOP.

Beitrag von Gast ( / / 0 / 3 ) »
Und dann natürlich

Code: Alles auswählen.

APPEND wa_record TO it_record. 
nach ENDLOOP weglassen!

Beitrag von Gast ( / / 0 / 3 ) »
Warum bin ich da nicht darauf gekommen? ;-)

Jetzt fehlt mir aber der letzte Eintrag in der Tabelle.

So ganz geholfen hat's nicht. Hast noch nen weiteren Tipp?

Beitrag von Gast ( / / 0 / 3 ) »
Ja. Vermutlich steht

Code: Alles auswählen.

  AT END OF row. 
    APPEND wa_record TO it_record. 
  ENDAT. 
noch unmittelbar nach LOOP AT ... und nicht unmittelbar vor ENDLOOP.

Beitrag von Gast ( / / 0 / 3 ) »
Du hast recht gehabt. Man muss nur richtig lesen. Super! Vielen Dank.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2099
Views
XML in interne Tabelle einlesen Camt.054 Format
von Big_Al » 19.03.2014 13:29 • Verfasst in ABAP® Core
4
Antw.
252
Views
5
Antw.
1306
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
364
Views

Über diesen Beitrag

Anonymous
Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.