2010-06-02 22 views
5

Manchmal ABAP treibt mich mit wirklich einfachen Aufgaben verrückt wie eine ganze Zahl innerhalb einer Schleife erhöht wird ...Increment eine ganze Zahl

Hier ist mein Versuch:

METHOD test. 

    DATA lv_id TYPE integer. 

    lv_id = 1. 

    LOOP AT x ASSIGNING <y>. 
    lv_id = lv_id+1. 
    ENDLOOP. 

ENDMETHOD. 

Dies führt zu der Fehlermeldung Feldtyp "I" erlaubt keinen Teilfeldzugriff.

Antwort

12

Du meinst, wie:

ADD 1 to lv_id. 

By the way, wenn Sie eine Schleife über eine interne Tabelle, SY-TABIX hat den Schleifenzähler.

+0

Danke, sehr hilfreich! – Ben

+0

Achten Sie nur auf Schleifen in Schleifen. Oh, und wenn Sie mit einem "DO..TIMES x" loopen, dann ist der Loop-Zähler "SY-INDEX". Ja, ABAP ist eine schrecklich inkonsistente Sprache. – Marius

+0

SY-TABIX enthält den Schleifenzähler nicht, er enthält den Tabellenindex. Dies sind oft unterschiedliche Werte. Wenn ich zum Beispiel 'LOOP AT Nachrichten IN msg WHERE type = 'E' schreibe, könnte das erste Mal, wenn die Schleife tatsächlich ausgeführt wird, in der vierten Zeile stehen, und der Wert von sy-tabix ist 4. – Eric

5

Uh, ich habe es. Es ist die f ****** Räume ...

lv_id = lv_id + 1 

Werke ...

+0

... aber wenn es einen eleganteren Weg gibt, würde mich das interessieren;) – Ben

17

Sie bereits beantwortet die Frage selbst, aber die Dinge ein wenig klarer zu machen:

variable + 1 

ein arithmetischer Ausdruck ist - fügen Sie 1 auf den Wert der Variablen.

variable+1 

ist eine Offsetoperation für eine Zeichenvariable. Wenn die Variable beispielsweise ABC enthält, ist variable+1BC.

Dies kann im Umgang mit NUMCs besonders verwirrend sein. Zum Beispiel wird mit variable = '4711'variable + 1 zu 4712 ausgewertet, wohingegen variable+1'711' (eine Zeichenfolge) ist.

Der Fehler, der aufgetreten ist, ist aufgetreten, weil es nicht möglich ist, die Indexoperation für eine nicht zeichenartige Variable auszuführen.

+0

Vielen Dank für die Erklärung. Ich bin sicher, ich mache diesen Fehler nicht wieder;) – Ben

1

Einfache

DATA: gv_inc Typ-I.

Ort diese Aussage in Schleife

gv_inc = gv_inc + 1.

0

Wenn Sie jeden Schleifenzyklus inkrementieren, können Sie direkt die Tabellengröße ermitteln.