2010-06-02 30 views
5

Czasami ABAP doprowadza mnie do szału z bardzo prostych zadań, takich jak zwiększając liczbę całkowitą w pętli ...Przyrost liczbą całkowitą

Oto moja próba:

METHOD test. 

    DATA lv_id TYPE integer. 

    lv_id = 1. 

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

ENDMETHOD. 

Powoduje to komunikat o błędzie typu polowego "I" nie zezwala na dostęp do podpola.

Odpowiedz

12

To znaczy, jak:

ADD 1 to lv_id. 

przy okazji, kiedy pętla nad wewnętrznym tabela, SY-TABIX ma licznik pętli.

+0

Dzięki, bardzo pomocne! – Ben

+0

Po prostu uważaj na pętle w pętlach. Aha, i jeśli używasz pętli 'DO..TIMES x', to licznik pętli będzie" SY-INDEX ". Tak, ABAP jest okropnie niespójnym językiem. – Marius

+0

SY-TABIX nie zawiera licznika pętli, zawiera indeks tabeli. Często są to różne wartości. Na przykład, jeśli piszę komunikaty LOOP AT do msg WHERE typ = 'E'', to po raz pierwszy faktycznie uruchomiona pętla może znajdować się w czwartym rzędzie, a wartość sy-tabix będzie równa 4. – Eric

5

Uh, mam to. To f ****** przestrzenie ...

lv_id = lv_id + 1 

działa ...

+0

... ale jeśli jest bardziej elegancki sposób, byłbym zainteresowany;) – Ben

17

Już odpowiedział na pytanie siebie, ale do rzeczy nieco jaśniejsze:

variable + 1 

jest wyrażeniem arytmetycznym - dodać 1 do wartości zmiennej.

variable+1 

to operacja przesunięcia na zmiennej znakowej. Na przykład jeśli zmienna zawiera ABC, variable+1 jest BC.

Może to być szczególnie mylące, gdy mamy do czynienia z NUMC. Na przykład z variable = '4711', variable + 1 jest oceniane na 4712, natomiast variable+1 jest '711' (sekwencja znaków).

Wystąpił błąd, ponieważ nie można wykonać operacji indeksu na zmiennej innej niż znakowa.

+0

Dziękuję za wyjaśnienie. Jestem pewien, że nie popełniam tego błędu ponownie;) – Ben

1

Proste

dane: typ gv_inc ja.

miejsce to stwierdzenie w pętli

gv_inc = gv_inc + 1.

0

Jeśli zamierzasz zwiększać każdy cykl pętli, możesz bezpośrednio uzyskać rozmiar stołu.

describe table x lines data(lv_id). "Out side of the loop. 
Powiązane problemy