2010-06-02 8 views
5

volte ABAP mi fa impazzire con compiti molto semplici come incrementare un intero all'interno di un ciclo ...Incremento un intero

Ecco la mia prova:

METHOD test. 

    DATA lv_id TYPE integer. 

    lv_id = 1. 

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

ENDMETHOD. 

Il risultato è il messaggio di errore di tipo campo "I" non consente l'accesso al sottocampo.

risposta

12

Vuoi dire come:

ADD 1 to lv_id. 

A proposito, quando si esegue un ciclo su un interno tabella, SY-TABIX ha il contatore del ciclo.

+0

Grazie, molto utile! – Ben

+0

State attenti ai loop all'interno dei loop. Oh, e se stai eseguendo il ciclo con un 'DO..TIMES x', il contatore del ciclo sarà' SY-INDEX'. Sì, ABAP è un linguaggio terribilmente incoerente. – Marius

+0

SY-TABIX non contiene il contatore del ciclo, contiene l'indice della tabella. Questi sono spesso valori diversi. Ad esempio, se scrivo "LOOP AT messages INTO msg WHERE type = 'E'', la prima volta che il loop viene eseguito potrebbe essere sulla quarta riga, e il valore di sy-tabix sarà 4. – Eric

5

Uh, ho capito. E 'il f ****** spazi ...

lv_id = lv_id + 1 

opere ...

+0

... ma se c'è un modo più elegante, sarei interessato;) – Ben

17

È già risposto alla domanda se stessi, ma per rendere le cose un po 'più chiaro:

variable + 1 

è un'espressione aritmetica - aggiunge 1 al valore della variabile.

variable+1 

è un'operazione di offset su una variabile di carattere. Ad esempio, se la variabile contiene ABC, variable+1 è BC.

Questo può essere particolarmente confuso quando si tratta di NUMC. Ad esempio, con variable = '4711', variable + 1 viene valutato su 4712, mentre variable+1 è '711' (sequenza di caratteri).

L'errore che si è verificato si è verificato perché non è possibile eseguire l'operazione di indice su una variabile non di tipo carattere.

+0

Grazie per il spiegazione. Sono sicuro di non commettere più questo errore;) – Ben

1

semplice

informazioni: Tipo gv_inc io.

posto questa dichiarazione nel ciclo

gv_inc = gv_inc + 1.

0

Se si desidera incrementare ogni ciclo di ciclo, è possibile ottenere direttamente le dimensioni della tabella.

describe table x lines data(lv_id). "Out side of the loop.