Ben
Ben

Reputation: 245

Increment an integer

Sometimes ABAP drives me crazy with really simple tasks such as incrementing an integer within a loop...

Here's my try:

METHOD test.

  DATA lv_id TYPE integer.

  lv_id = 1.

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

ENDMETHOD.

This results in the error message Field type "I" does not permit subfield access.

Upvotes: 7

Views: 40673

Answers (6)

Frontmaniaac
Frontmaniaac

Reputation: 250

from SAP NetWeaver Version 7.54 you can also use:

lv_id += 1.

Instead of

lv_id = lv_id + 1.

Happy coding!

Upvotes: 1

user8320743
user8320743

Reputation:

If you are going to increment every loop cycle than you can directly get the table size.

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

Upvotes: 0

Android Genius
Android Genius

Reputation: 324

Simple

DATA : gv_inc type I .

place this statement in loop

gv_inc = gv_inc + 1 .

Upvotes: 1

vwegert
vwegert

Reputation: 18493

You already answered the question yourself, but to make things a bit clearer:

variable + 1 

is an arithmetic expression - add 1 to the value of the variable.

variable+1

is an offset operation on a character variable. For example, if variable contains ABC, variable+1 is BC.

This can be especially confusing when dealing with NUMCs. For example, with variable = '4711', variable + 1 is evaluated to 4712, whereas variable+1 is '711' (a character sequence).

The error you saw occurred because it's not possible to perform the index operation on a non-character-like variable.

Upvotes: 24

tomdemuyt
tomdemuyt

Reputation: 4592

You mean like:

ADD 1 to lv_id.

By the way, when you loop over an internal table, SY-TABIX has the loop counter.

Upvotes: 15

Ben
Ben

Reputation: 245

Uh, I got it. It's the f****** spaces...

lv_id = lv_id + 1

works...

Upvotes: 8

Related Questions