ABAP基础语法(赋值,数值处理,与流程控制 )

1.赋值(三种方法)

MOVE F1 TO F2
WRITE VALUE TO FIELD
等号

偏移量

MOVE [+<偏移量>] [(<取位数>)] to [+<偏移量>][(<取数位>)]
WRITE…

DATA: LV_DATE1 TYPE SY-DATUM.
DATA: LV_DATE2 TYPE SY-DATUM.
LV_DATE1 = SY-DATUM.
LV_DATE2 = LV_DATE1.
LV_DATE2+6(2) = 30.
WRITE LV_DATE1.
SKIP.
WRITE LV_DATE2.

字段变量组件复制。
move-corresponding to

types:begin of  ty_s1,
  id type char10,
  name type char20,
  end of ty_s1.

  types:BEGIN OF ty_s2.
    INCLUDE type ty_s1.    " structre is used by standard structure.
  TYPES:COUNT TYPE INT2.
  TYPES: END OF TY_S2.

  DATA: LS_S1 TYPE TY_S1.
  DATA: LS_S2 TYPE TY_S2.

  LS_S1-id = 00001 .
  LS_S1-name = 'Harry'.

  MOVE-CORRESPONDING LS_S1 TO LS_S2.

  WRITE LS_S1.
  SKIP.
  WRITE:/,ls_s2-id.
  WRITE:/,ls_s2-name.
  WRITE:/,ls_s2-count.

通过指针实现数据的赋值


   FIELD-SYMBOLS <FS1>.
  DATA:LV_DATA1 TYPE CHAR10 VALUE 'ABCD'.
  DATA:LV_DATA2 TYPE INT2 VALUE 10.
  ASSIGN LV_DATA2 TO <FS1>.
  WRITE:/, '<FS1>', <FS1>.
  WRITE:/, 'lv_data2', lv_data2.
  if <fs1> is ASSIGNED.
    <fs1> = 8.
    ENDIF.
    WRITE:/, 'lv_data2', lv_data2.
2.数值处理

在不同类型的数据对象之间赋值,会自动进行类型的转换;
转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符传递,其它忽略;
C不能直接赋值给I,需要C-N-I;
可以使用move to 或write to 语句。
以下是LV_DATA1不能直接赋值给lv_data2.

 FIELD-SYMBOLS <FS1>.
  DATA:LV_DATA1 TYPE CHAR10 VALUE 'ABCD'.
  DATA:LV_DATA2 TYPE INT2 VALUE 10.
   DATA:LV_DATA4 TYPE INT2 VALUE 7.
  ASSIGN LV_DATA2 TO <FS1>.
  WRITE:/, '<FS1>', <FS1>.
  WRITE:/, 'lv_data2', lv_data2.
  if <fs1> is ASSIGNED.
    <fs1> = 8.
    ENDIF.
    WRITE:/, 'lv_data2', lv_data2.
    WRITE SY-ULINE.
    LV_DATA1 = 12345 .
  data : lv_data3(6) type n.
  lv_data3 = lv_data1.
  lv_data2 = lv_data3.
   WRITE:/, 'lv_data1', lv_data1.
   WRITE:/, 'lv_data2', lv_data2.

算术运算符与比较逻辑运算符

      • / div mod(/ 与DIV是一样)

运算符与变量之间必须有空格。

比较运算符
EQ 或= (等于)
<> 或 >< 或NE:(不等于)
<或LT: 小于
<=或LE: 小于等于

或GT: 大于
= 或GE: 大于等于

逻辑运算符:
AND:
OR:
NOT:
比较逻辑运算符是用于逻辑判断。

ABAP函数有

ABS :返回输入参数的绝对值
TRUNC:返回输入参数的整数部份
FRAC : 返回输入参数的小数部份
STRLEN:获取字符串长度函数

  DATA: LV_STRING TYPE STRING.
   LV_STRING = '1123456789'.
   DATA: LV_NUMBER TYPE I.
   LV_NUMBER = STRLEN( LV_STRING ).
   WRITE:/,'LV_NUMBER:',LV_NUMBER.

日期数据的运算与时间数据的运算。

字符串处理

字符串移位
将字符串整体或者子串进行位移:
shift [by places] []

  " 字符串移位
   Data lv_string1 type string.
   LV_STRING1 = 'ABCDEFG'.
   WRITE SY-ULINE.
   WRITE:/,'LV_STRING1:', LV_STRING1.
   SHIFT LV_STRING1 BY 3 PLACES RIGHT.
   WRITE:/,'LV_STRING1:', LV_STRING1.

移除字符串C左边/右边的子字符串C1:
shift c left/right deleting
leading/trailing c1

 " 字符串移位
   Data lv_string1 type string.
   DATA LV_SUBS(3) TYPE C VALUE 'ABC'.
   DATA LV_SUBS1(3) TYPE C VALUE 'EFG'.
   LV_STRING1 = 'ABCDEFG'.
   WRITE SY-ULINE.
   WRITE:/,'LV_STRING1:', LV_STRING1.
   SHIFT LV_STRING1 BY 3 PLACES RIGHT.
   WRITE:/,'LV_STRING1:', LV_STRING1.
   SHIFT LV_STRING1 LEFT DELETING LEADING SPACE.
    WRITE:/,'LV_STRING1:', LV_STRING1.
      SHIFT LV_STRING1 RIGHT DELETING TRAILING LV_SUBS1.
    WRITE:/,'LV_STRING1:', LV_STRING1.

替代字符串
REPLACE WITH INTO
将字符串中的以来取代

字竺串转换
translate to upper/lower case.
将全部字符转成大写/小写

寻找字符串
从字符串F中搜索字符串g
SEARCH F FOR G
会回存到两个数,sy-subrc 和 sy-fdpos(sy-fdpos这个是开始位置)
如果查找这些则必须加 ’ ..’

字符串合并
将多个字街串合并成一个字符串
concaenate F1…Fn into g [separated by h]

字符串拆分
将一个字符串拆分并赋值给多个变量。
split f at g into h1…hn

去除字符串的空格:
condense c

清除变量内容
CLEAR

3.流程控制

SAP中无非就是数据流和凭证流;把这些可以串联接起来就可以了
IF .
.
ELSEIF

ELSE

ENDIF

case . " 这里是变量,主要用于屏幕的功能码。
when .
.
when .
.
when …
when others.
.
endcase.

循环语句
计数循环;条件循环 loop 循环

计数循环
DO [ TIMES]

ENDDO.
n:可以是数字或者变量,如果n是0要么负数,系统不执行该循环
TIMES:循环次数.
该语句埕中至少包含一个EXIT, STOP语句。
系统为量sy-index记录循环的次数.

条件循环
使用while指定循环条件:
WHILE

ENDWHILE
满足条件时候执行,不满足,退出.

loop循环
loop循环常用于实现内表数据的循环读取和操作
loop at itab
write:itab.
endloop.

循环语句关键字
continue :无条件终止当前循环,直接执行下一次循环
exit : 终止所有循环
CHECK:有条件终止当前循环

以下是上面的例子.

 " 去触空格
    CONDENSE  LV_STRING1.
    WRITE:/,'LV_STRING1:', LV_STRING1.
    "字符串替换
    lv_string1 = 'ABCDEFG'.
    lv_string2 = '1234' .

   " 将lv_string1 里的'ABC'替换成 '1234'.
    WRITE SY-ULINE.
    REPLACE LV_SUBS WITH LV_STRING2 INTO LV_STRING1.
     WRITE:/,'LV_STRING1:', LV_STRING1.

"字符串查找
   SEARCH LV_STRING1 FOR LV_STRING2.
    WRITE:/ '查找结果',sy-subrc,sy-fdpos.

    WRITE: SY-ULINE.
    " 字符串拼接
    CONCATENATE lv_string1 lv_string2 INTO lv_string1  SEPARATED BY SPACE.
    WRITE:/,'LV_STRING1:', LV_STRING1.
    CONDENSE lv_string1 NO-GAPS.
     WRITE:/,'LV_STRING1:', LV_STRING1.
    "字符串的拆分
    CLEAR LV_STRING2.
    DATA: LV_STRING3 TYPE STRING.
    SPLIT lv_string1  AT SPACE INTO LV_STRING2 LV_STRING3 .
    WRITE SY-ULINE.
    WRITE:/,'LV_STRING2:', LV_STRING2.
    WRITE:/,'LV_STRING3:', LV_STRING3.

    " 条件语句(判读语句) 变量lv_number是否是偶数
    DATA LV_NUMBER1 TYPE INT2.
    DATA LV_RESULT TYPE INT2.
    WRITE SY-ULINE.
    LV_NUMBER1 = 7.
    LV_RESULT = LV_NUMBER1 MOD 2.
    IF lv_result = 0.
      WRITE: 'lv_number1 是偶数'.
    else.
      write : 'lv_number1 是基数'.
    endif.
    " DO循环
    WRITE SY-ULINE.
    DO 5 TIMES.
      WRITE:/,'当前是第',SY-index, '次循环'.
    ENDDO.
    " DO循环
   WRITE  SY-ULINE.
    do 5 TIMES.
     WRITE:/,  '当前是第',SY-index, '次循环第一次打印'.
    IF  sy-index = 3.
       CONTINUE.
     endif.
      WRITE:/,  '当前是第',SY-index, '次循环的第二次打印'.
    ENDDO.

    " WHILE 循环
    WRITE SY-ULINE.
    While sy-index <= 5.
      WRITE:/,  '当前是第',SY-index, '次循环'.
    ENDWHILE.
       CHECK  SY-INDEX = 5.
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值