2010-06-02 48 views
5

有時ABAP我逼瘋了用非常簡單的任務,如在循環中遞增一個整數...增量整數

這裏是我的嘗試:

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. 

順便說一句,當你遍歷一個內部表中,SY-TABIX有循環計數器。

+0

謝謝,非常有幫助! – Ben 2010-06-07 14:37:52

+0

只要注意循環內的循環。哦,如果你正在用'DO..TIMES x'循環,那麼循環計數器就是'SY-INDEX'。是的,ABAP是一種非常不一致的語言。 – Marius 2013-10-23 15:47:19

+0

SY-TABIX不包含循環計數器,它包含表索引。這些往往是不同的價值觀。例如,如果我將LOOP AT消息寫入msg WHERE type ='E'',循環實際運行的第一次可能會在第四行,並且sy-tabix的值將是4. – Eric 2014-07-22 18:21:45

5

呃,我明白了。 這是在F ******空間...

lv_id = lv_id + 1 

作品...

+0

...但如果有更優雅的方式,我會感興趣;) – Ben 2010-06-02 13:12:40

17

你已經自己回答了這個問題,反而使事情更清楚一點:

variable + 1 

是一個算術表達式 - 加1到變量的值。

variable+1 

是對字符變量的偏移操作。例如,如果變量包含ABCvariable+1BC

這在處理NUMC時會特別令人困惑。例如,用variable = '4711',variable + 1評估爲4712,而variable+1'711'(字符序列)。

您看到的錯誤發生是因爲無法對非字符變量執行索引操作。

+0

感謝您的支持交代。我確信我不會再犯這個錯誤;) – Ben 2010-06-07 14:39:30

1

簡單

DATA:gv_inc I型。

地方這種說法在循環

gv_inc = gv_inc + 1。

0

如果您要增加每個循環的循環次數,您可以直接獲取表格大小。

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