Prüfung interner Tabelle

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

Prüfung interner Tabelle

Beitrag von knut (ForumUser / 4 / 0 / 0 ) » 27.06.2005 14:44
Hallo,

ich muss eine interne Tabelle mit 10 Feldern auf Inhalt prüfen. Wenn ein Feld initial ist, sollen Sonderzeichen aufgefüllt werden.
Wie stell ich es geschickt an, um nicht bei jedem Feld: IF feld1 initial... fragen zu müssen.

Gruß knut


Beitrag von ewx (Top Expert / 4244 / 200 / 444 ) » 27.06.2005 14:48
Hi Knut,

ASSIGN COMPONENT heisst das Zauberwort.

Gruß,
Enno.

Beitrag von babap (Expert / 677 / 1 / 1 ) » 28.06.2005 10:14
Hallo,

einfach alle Felder der Struktur durchsehen, unabhängig davon, wie sie heißen, oder was sie sind.

Code: Alles auswählen.

data: xxx TYPE mytype. "irgendwelche Felder
field-symbols: <xxx> type any.

CLEAR h_comp.
DO.
  ADD 1 TO h_comp.
* Quell-Feld zuweisen
  ASSIGN COMPONENT h_comp OF STRUCTURE xxx TO <xxx>.
* Fertig, wenn Zuweisung fehlschlägt
  IF sy-subrc NE 0.
    EXIT.
* Zuweisung OK
  ELSE.
* Quellfeld prüfen??
    IF <xxx> IS INITIAL.
* ins Zielfeld was reinstellen
      MOVE 'yyyy' to <xxx>.
    ENDIF." Quell-Feld war leer
  ENDIF. "Komponente war gültig
ENDDO. "Datenfelder der Struktur bearbeiten
Gruß
babap

Beitrag von ereglam (Top Expert / 1826 / 0 / 5 ) » 28.06.2005 10:34
Hallo babap,

da Du doch die jeweilige gesamte Struktur durchforsten willst, kannst Du auf die Hilfsvariable h_comp verzichten und statt dessen sy-index benutzen, das wegen der DO-Schleife korrekt hochzählt... ;)

Da es sich ja bei der Aufgabenstellung um eine Tabelle handelt: Ist da das durchLOOPen für jeden Satz notwendig?
Meine Idee war es, eine Kopfzeile/WA für die Tabelle mittels DO. ASSIGN COMPONENT... durchzugehen und dann mit MODIFY itab FROM wa zu arbeiten. Geht das?
Beispiel:

Code: Alles auswählen.

DATA:
  itab    TYPE TABLE,
  wa_itab LIKE LINE OF itab.
FIELD-SYMBOLS:
  <field> TYPE ANY. 
DO. 
  ASSIGN COMPONENT sy-index OF STRUCTURE wa_itab TO <field>. 
  IF sy-subrc NE 0. 
    EXIT. 
  ELSE. 
* Quellfeld prüfen?? 
    IF <field> IS INITIAL. 
* ins Zielfeld was reinstellen 
      CLEAR <field> WITH 'Ï'. 
      MODIFY itab FROM wa_itab
                  WHERE 'Feldname' = space "woher??
                  TRANSPORTING ('Feldname').
    ENDIF." Quell-Feld war leer 
  ENDIF. "Komponente war gültig 
ENDDO. "Datenfelder der Struktur bearbeiten
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .
Mitglied im XING

Beitrag von babap (Expert / 677 / 1 / 1 ) » 28.06.2005 10:56
Hallo,

mit sy-index, sy-tabix, sy-loopc habe ich so meine "schlechten" Erfahrungen gemacht. Kaum füge ich eine "Unterschleife" ein, funktioniert das ganze nicht mehr, deshalb nehme ich einen eigenen Zähler (reine Erfahrung ...).

Da die Prüfung, um die es geht auf eine Tabellenzeile angewendet werden soll, würde ich das ganze, auch aus Performance-Gründen, mit LOOP AT table ASSIGNING <table> machen.

Es ist keine Kopfzeile, kein Arbeitsbereich und kein MODIFY FROM irgendwas notwendig.

Man arbeitet einfach direkt auf der Tabelle. (Änderung bei --->>> <<<---, alles andere wie vorher)

Code: Alles auswählen.

*--->>>
DATA: itab TYPE TABLE of mytable.
FIELD-SYMBOL: <itab> like line of itab.
*<<<---

field-symbols: <xxx> type any. 

LOOP AT itab assigning <itab>.

CLEAR h_comp. 
DO. 
  ADD 1 TO h_comp. 
* Quell-Feld zuweisen

*--->>> 
  ASSIGN COMPONENT h_comp OF STRUCTURE [b]<itab[/b]> TO <xxx>. 
*<<<---

* Fertig, wenn Zuweisung fehlschlägt 
  IF sy-subrc NE 0. 
    EXIT. 
* Zuweisung OK 
  ELSE. 
* Quellfeld prüfen?? 
    IF <xxx> IS INITIAL. 
* ins Zielfeld was reinstellen 
      MOVE 'yyyy' to <xxx>. 
    ENDIF." Quell-Feld war leer 
  ENDIF. "Komponente war gültig 
ENDDO. "Datenfelder der Struktur bearbeiten
In der ASSIGN COMPONENT-Zeile wurde nur xxx gegen <itab> ausgetauscht.

(müsste so funktionieren)

Gruß
babap

Beitrag von ereglam (Top Expert / 1826 / 0 / 5 ) » 28.06.2005 11:21
Hallo,

bei meinem Beispiel, dass ja so noch nicht funktioniert, gibt es noch den Fehler, dass man für die Kopfzeile keine Prüfung benötigt und die eigentliche Arbeit durch den MODIFY ... WHERE gemacht werden sollte.
Welcher Ansatz performancemäßig günstiger ist, ist ohnehin noch zu klären.

Bzgl. SY-INDEX:
bei verschachtelten DO-Schleifen ist es mit SY-INDEX, wie von Dir schon gesagt, etwas kritisch wegen möglicher Nebenwirkungen durch PERFORMs und Mehrfachschachtelungen.
Bei obigen Beispiel wäre es einfache eine Alternative.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .
Mitglied im XING

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Prüfung ob tabelle existiert
von bliP! » 07.02.2006 15:06
Löschen aus interner Tabelle
von Beginner014 » 21.11.2014 09:26
Problem mit interner Tabelle
von Troilus » 17.11.2007 23:09
Key Felder von interner Tabelle auf dem ALV
von thesaint » 14.07.2005 16:32
Move-Corresponding mit interner Tabelle
von Dele » 13.10.2015 13:53