Abap 递增整数

Abap 递增整数,abap,Abap,有时ABAP会让我为一些非常简单的任务发疯,比如在循环中增加一个整数 以下是我的尝试: METHOD test. DATA lv_id TYPE integer. lv_id = 1. LOOP AT x ASSIGNING <y>. lv_id = lv_id+1. ENDLOOP. ENDMETHOD. 方法测试。 数据lv_id类型整数。 lv_id=1。 在x处循环。 lv\U id=lv\U id+1。 结束循环。 ENDMETHOD。

有时ABAP会让我为一些非常简单的任务发疯,比如在循环中增加一个整数

以下是我的尝试:

METHOD test.

  DATA lv_id TYPE integer.

  lv_id = 1.

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

ENDMETHOD.
方法测试。
数据lv_id类型整数。
lv_id=1。
在x处循环。
lv\U id=lv\U id+1。
结束循环。
ENDMETHOD。
这导致错误消息字段类型“I”不允许子字段访问。

嗯,我知道了。 这是f*******空间

lv_id = lv_id + 1
工作…

你的意思是:

ADD 1 to lv_id.

顺便说一句,当您在内部表上循环时,SY-TABIX具有循环计数器。

您已经自己回答了这个问题,但为了让事情更清楚一些:

variable + 1 
是一个算术表达式-将1添加到变量的值

variable+1
是对字符变量的偏移操作。例如,如果变量包含
ABC
variable+1
BC

在处理NUMC时,这可能特别令人困惑。例如,使用
variable='4711'
variable+1
计算为
4712
,而
variable+1
'711'
(字符序列)


出现您看到的错误是因为无法对非字符型变量执行索引操作。

Simple

数据:gv_公司I型

将此语句放入循环中


gv_inc=gv_inc+1。

如果要增加每个循环周期,则可以直接获得表大小

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

…但如果有更优雅的方式,我会感兴趣;)谢谢你的解释。我确信我不会再犯这个错误;)注意循环中的循环。哦,如果您使用
DO..TIMES x进行循环,那么循环计数器将是
SY-INDEX
。是的,ABAP是一种非常不一致的语言。SY-TABIX不包含循环计数器,它包含表索引。这些通常是不同的价值观。例如,如果我将消息处的
循环写入msg,其中type='E'
,循环实际运行的第一次可能在第四行,sy tabix的值将为4。这可能在新的abap语法中起作用:lv_id+=1。