2010-06-02 51 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.