2010-06-02 3 views
5

Иногда ABAP сводит меня с умом действительно простыми задачами, такими как увеличивающаяся целое число в пределах цикла ...Increment целое

Вот моя попытка:

METHOD test. 

    DATA lv_id TYPE integer. 

    lv_id = 1. 

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

ENDMETHOD. 

Это приводит к сообщению об ошибке типа поля «Я» не разрешает доступ к подполам.

ответ

12

Вы имеете в виду, как:

ADD 1 to lv_id. 

Кстати, когда цикл по внутренним table, SY-TABIX имеет счетчик циклов.

+0

Спасибо, очень полезно! – Ben

+0

Просто остерегайтесь петель внутри петель. О, и если вы зацикливаетесь с 'DO..TIMES x', то счетчиком цикла будет' SY-INDEX'. Да, ABAP - ужасно непоследовательный язык. – Marius

+0

SY-TABIX не содержит счетчика циклов, он содержит индекс таблицы. Это часто разные значения. Например, если я пишу 'LOOP AT-сообщения INTO msg WHERE type = 'E'', первый раз, когда цикл фактически выполняется, может быть в четвертой строке, а значение sy-tabix будет равно 4. – Eric

5

Ух, я понял. Это е ****** пространства ...

lv_id = lv_id + 1 

работы ...

+0

... но если есть более элегантный способ, мне было бы интересно;) – Ben

17

Вы уже ответили на вопрос самостоятельно, но, чтобы сделать вещи немного яснее:

variable + 1 

является арифметическое выражение - прибавить 1 к значению переменной.

variable+1 

- операция смещения символьной переменной. Например, если переменная содержит ABC, variable+1 - BC.

Это может быть особенно запутанным при работе с NUMC. Например, с variable = '4711', variable + 1 оценивается как 4712, тогда как variable+1 - '711' (последовательность символов).

Ошибка, которую вы видели, произошла из-за невозможности выполнить операцию индекса в переменной, отличной от символов.

+0

Спасибо за объяснения. Я уверен, что не повторю эту ошибку;) – Ben

1

Простой

ДАННЫЕ: gv_inc тип I.

место это утверждение в цикле

gv_inc = gv_inc + 1.

0

Если вы собираетесь увеличивать каждый цикл цикла, вы можете напрямую получить размер таблицы.

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

 Смежные вопросы

  • Нет связанных вопросов^_^