2010-06-02 11 views
5

veces ABAP me vuelve loco con tareas muy simples, tales como incrementar un número entero dentro de un bucle ...un entero

Aquí está mi intento:

METHOD test. 

    DATA lv_id TYPE integer. 

    lv_id = 1. 

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

ENDMETHOD. 

Esto se traduce en el mensaje de error de tipo Campo "I" no permite el acceso al subcampo.

Respuesta

12

¿Quieres decir como:

ADD 1 to lv_id. 

Por cierto, cuando se recorre una interna tabla, SY-TABIX tiene el contador de bucle.

+0

¡Gracias, muy útiles! – Ben

+0

Solo tenga cuidado con los bucles dentro de los bucles. Ah, y si está bucleando con un 'DO..TIMES x', entonces el contador de bucles será' SY-INDEX'. Sí, ABAP es un lenguaje terriblemente inconsistente. – Marius

+0

SY-TABIX no contiene el contador de bucles, contiene el índice de tabla. Estos son a menudo valores diferentes. Por ejemplo, si escribo 'LOOP AT messages INTO msg WHERE type = 'E'', la primera vez que se ejecute realmente podría estar en la cuarta fila, y el valor de sy-tabix será 4. – Eric

5

Uh, lo tengo. Es la f ****** espacios ...

lv_id = lv_id + 1 

obras ...

+0

... pero si hay una manera más elegante, estaría interesado;) – Ben

17

Ya contestaron la pregunta a sí mismo, sino para hacer las cosas un poco más claro:

variable + 1 

es una expresión aritmética - 1 añadir al valor de la variable.

variable+1 

es una operación de desplazamiento en una variable de caracteres. Por ejemplo, si la variable contiene ABC, variable+1 es BC.

Esto puede ser especialmente confuso cuando se trata de NUMCs. Por ejemplo, con variable = '4711', variable + 1 se evalúa a 4712, mientras que variable+1 es '711' (una secuencia de caracteres).

El error que vio ocurrió porque no es posible realizar la operación de índice en una variable que no es de carácter.

+0

Gracias por explicación Estoy seguro de que no cometo este error de nuevo;) – Ben

1

simple

datos: Tipo I gv_inc.

lugar esta declaración en bucle

gv_inc = gv_inc + 1.

0

Si va a aumentar cada ciclo de bucle de lo que puede obtener directamente el tamaño de la tabla.

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