abap学习日志--语法3

数据处理

一、数据的赋值

  • 赋值

    数据的赋值是程序的常用操作 :

    1. MOVE TO

      将F1的值存至变量 F2 中,F1与F2可以是不同类型的变量,但有一定限制。

      DATA:  m_gendle(4) TYPE c.
      MOVE 'MALE' TO m_gendle.
      WRITE: m_gendle.
      
    2. WRITE TO .带有格式的赋值

      DATA: NAME(20)  VALUE  'SOURCE',
      SOURCE(10)  VALUE  'LILY',
      TARGET(10).
      WRITE  (NAME)  TO  TARGET.
      WRITE  /  TARGET. 
      

      这里的WRITE用于赋值,不是用于输出

  • 使用偏移

    在源字段中取偏移量赋值给目标变量:

    MOVE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)

    WRITE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)

    [+<偏移量>][(<取数位>) = + [+<偏移量>][(<取数位>)]

    DATA: F1(10)  VALUE  'ABCDEFGHIJ',
          F2(5).
    F2 = F1+3(5).
    WRITE: F1, / F2.
    
  • 字段变量组件的复制

    用于结构体的赋值,将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的字段:

    MOVE –CORRESPONDING TO .

    DATA:BEGIN OF string1,
           firstname(10) VALUE '11',
           lastname(10)  VALUE 'chou',
         END OF string1.
    DATA:BEGIN OF string2,
           firstname(10),
           lastname(10),
         END OF name.
    MOVE-CORRESPONDING string1 TO string2.
    WRITE / string2.
    
  • 通过指针实现数据的赋值

    指针对象,通过语句FIELD-SYMBOLS加上将括号“<>”来定义。

    FIELD-SYMBOLS .

    ASSIGN TO .

    DATA num TYPE i VALUE 12.
    FIELD-SYMBOLS:<f1>,
                  <f2> TYPE i,
                  <f3> LIKE num.
    ASSIGN:num TO <f1>,
           num TO <f2>,
           num TO <f3>.
    WRITE: / num,<f1>,<f2>,<f3>.
    <f2> = 25.
    WRITE: / num,<f1>,<f2>,<f3>.
    

    •可以不指定参考类型,用语句ASSIGN来分配给它变量.

    • 并不是变量,存放的是变量的地址,而非变量本身。

    •如果修改了field symbol的值,则相应的变量的值也随之更改。

二、数据的处理

  • 类型转换

    在不同类型的数据对象之间赋值,会自动进行类型的转换;

    转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略;

    C不能直接赋值给I,需要C->N->I;

    可以使用MOVE TO或WRITE TO语句。

    DATA: text(10)   TYPE c VALUE 'ACBD21231',
          number(10) TYPE n,
          int        TYPE i.
    number = text.
    int = number.
    WRITE:/ number,int.
    
    data:chr type c.
    field-symbols:<FS> type x,
                   <FC> type c.
    chr = 'A'.
    assign chr to <FS> casting.
    write:/ chr,<FS>.
    
    <FS> = <FS>+1.
    assign <FS> to <FC> casting.
    move <FC> to chr.
    write:/ chr,<FS>,<FC>.
    
  • 算数运算符

    * 乘

    / 除

    + 加

    - 减

    DIV 整数除法

    MOD 余数除法

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

    data:INTEGER type i.
    compute INTEGER = INTEGER + 10.
    INTEGER = INTEGER + 10.
    add 10 to INTEGER.
    write:/ INTEGER.
    
  • 比较逻辑运算符

    比较运算符:

    = 或 EQ : 等于

    <> 或 >< 或 NE: 不等于

    < 或 LT: 小于

    <= 或 LE: 小于等于

    > 或 GT: 大于

    >= 或 GE : 大于等于

    逻辑运算符:

    AND: 且

    OR : 或

    NOT : 非

    IF 100 > 80.
      WRITE / 'its true'.
    ENDIF.
    IF 100 > 80 AND 90 > 80.
      WRITE / 'its true'.
    ENDIF.
    
  • 算数运算函数
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xb6JM4Rf-1670834733956)(C:\Users\Administrator.BG9592\AppData\Roaming\Typora\typora-user-images\image-20221212142153919.png)]

    DATA n TYPE p DECIMALS 2.
    DATA m TYPE p DECIMALS 2 VALUE '-5.55'.
    n = abs(m). WRITE: 'ABS :',n.
    n = sign(m). WRITE: /'sign :',n.
    n = ceil(m). WRITE: /'ceil :',n.
    n = floor(m). WRITE:/ 'floor :',n.
    n = trunc(m). WRITE:/ 'trunc :',n.
    n = frac(m). WRITE:/ 'frac :',n.
    
  • 日期与事件运算
    日期数据可以直接运算,如加法和减法的运算

    data: diff type i,
          second type i,
          hours type i.
    data: t1 type t value '200000',
          t2 type t value '022222'.
    diff = t2 - t1.
    WRITE: / 'diff:',diff.
    second = diff mod 86400.
    WRITE: / 'second:',second.
    hours = second / 3600.
    WRITE: / 'hours:',hours.
    
  • 时间数据运算

  • 时间格式为 ‘hhmmss’

    '212030’表 ‘21:20:30’

    data:hour type i,
          minutes type i,
          t type t value '200000',
          t4 type t value '183000'.
    hour = ( t2 - t1 ) / 3600.
    minutes = ( t2 - t1 ) / 60.
    write: / hour,minutes.
    
  • 字符串数据处理
    字符串位移整体或字串进行位移:

    SHIFT [BY PLACES] []

    :

    (1).空白, 字符串往左移一位

    (2).LEFT, 字符串往左移 n 位

    (3).RIGHT, 字符串往右移 n 位

    指定字符串c从子串c1进行位移:

    SHIFT c UP TO c1

    执行结果返回系统参数SY-SUBRC

    执行成功,返回0,不匹配,返回4

    data:string(10) value 'ABCDEFGHIJ'.
    shift string.
    write:/ string.
    
    shift string by 2 places right.
    write:/ string.
    
    DATA:shift_string1(10) VALUE 'ABCDEFGHIJ',
         shift_string2(10) VALUE 'ABCDEFGHIJ',
         s_three(4)        VALUE 'DEF',
         s_four(3)         VALUE 'DEF'.
    SHIFT shift_string1 UP TO s_three.
    WRITE:/ 'shift_string1=',shift_string1,',sy-sub RC=',sy-subrc.
    
    SHIFT shift_string2 UP TO s_four.
    WRITE:/ 'shift_string2=',shift_string2,',sy-sub RC=',sy-subrc.
    

    移除字符串c左边/右边的子字符串c1:

    SHIFT c LEFT/RIGHT DELETING LEADING/ TRAILING c1

    执行结果返回系统参数SY-SUBRC

    执行成功,返回0,不匹配,返回4

    data :shift_str1(10) VALUE 'ABCDEFGHIJ',
          shift_str2(10) VALUE 'ABCDEFGHIJ',
          shift_str3 type string,
          m1(4) value 'ABCD',
          m2(6) value 'HIJ'.
    shift_str3 = shift_str1.
    write:/ 'shift_str1=',shift_str1.
    shift shift_str1 left deleting leading space."删除空格"
    write:/ 'shift_str1=',shift_str1.
    shift shift_str1 left deleting leading m1."删除ABCD"
    write:/ 'shift_str1=',shift_str1.
    
    write:/ 'shift_str2=',shift_str2.
    shift shift_str2 right deleting trailing m2."删除HIJ"
    write:/ 'shift_str2=',shift_str2.
    
    write:/ 'shift_str3=',shift_str3.
    shift shift_str3 left deleting leading space."删除HIJ"
    
  • 交替字符串

    REPLACE WITH INTO

    将字符串 中的 以 来取代

    data: lv_string(10) value 'ABCDEFGHIJ',
          str1(3) value 'DEF',
          str2(3) value '123'.
    write:/ 'lv_string=',lv_string.
    replace str1 with str2 into lv_string.
    write:/ 'lv_string=',lv_string.
    
  • 字符串转换

    TRANSLATE TO UPPER/LOWER CASE.

    将全部字符转成大写/小写

    data:city(9) type c value 'shanghai',
          country(5) type c value 'CHINA'.
    translate city to upper case.
    translate country to lower case.
    
    write:/ 'city=',city,
          / 'country=',country.
    
  • 寻找字符串

从字符串f/表itab中搜索字符串g

​ SEARCH f/itabFOR g
​ …ABBREVIATED

​ 从指定字符串中/内表中按顺序/逐行搜索相匹配字符串,搜索单词第一个需与字符串中包含的单词第一个匹配
​ …STARTING AT n1/line1

​ 从字符串n1个字符/内表中具体某行开始搜索匹配字符串
…ENDING AT n2/line2

​ 搜索到字符串第n2个字符止/最大范围到内表中具体某行
​ …AND MARK:

​ 从指定字符串/内表中模糊搜索相匹配字符串•会回存至两个变数,SY-SUBRC 和 SY-FDPOS:
若找到则 SY-SUBRC 为 0,SY-FDPOS 存开始位置
​ 若找不到则 SY-SUBRC为 4, SY-FDPOS为 0

​ 对于一些特殊符号,如“”、“@”、“.”等,需要在其两边加上句号作为修饰。如某字符串为"AAABBB",查找符 号"*"的位置

data search_str(50).
move 'welcome to spa world' to search_str.
search search_str for 'wld' ABBREVIATED.
WRITE :/ 'SY-SUBRC=',SY-SUBRC,
       /'SY-FDPOS=',SY-FDPOS.

DATA search_str2(50).
move 'AAA*BBB' to search_str2.
search search_str2 for '*'.
WRITE :/ 'SY-SUBRC=',SY-SUBRC,
       /'SY-FDPOS=',SY-FDPOS.

•若内表有多行,那么字符串查找位置默认为从某行数据第一位开始

  • 字符串合并

    将多个字符串合并成一个字符串:

    CONCATENATE f1…fn INTO g [SEPARATED BY h]

    SPARATED BY表示在连接字符串中加入分隔符号

  • 字符串拆分

    去除字符串的空格:

    CONDENSE c

    •字符串前置空格被删除

    •NO-GAPS——前置空格以及中间所有空格被删除

  • 清除变量内容

    CLEAR

    •清除变量内容

    •常量不能被清空

    data: n type i value 100.
    clear n.
    write n.
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP是一种用于SAP系统开发的编程语言,其中pp模块是SAP系统中的生产计划模块,主要用于生产计划、生产过程控制和生产数据记录等。 ABAP开发在pp模块中的要点如下: 1. 熟悉pp模块的基础知识:了解pp模块的功能和流程,包括物料需求计划、生产订单、工作中心、生产版本等。这些知识对于正确理解和开发与pp模块相关的程序非常重要。 2. 掌握ABAP语言特性:ABAP作为SAP系统的开发语言,开发人员需要掌握其语法和特性,例如数据类型、变量声明、循环语句、条件语句等。这些知识将帮助开发人员编写高效且可靠的pp模块程序。 3. 理解生产计划数据结构:pp模块涉及的数据结构较为复杂,包括物料清单、工艺路线、生产订单等。开发人员需要了解这些数据结构的组成和关系,以便能够正确地读取和处理这些数据。 4. 开发报表和界面程序:PP模块通常需要输出各种类型的报表,如生产订单报表、工序报表等。开发人员需要根据用户需求设计和开发这些报表,并保证它们的准确性和易用性。 5. 数据验证和错误处理:在pp模块开发中,数据的准确性和可靠性非常重要。开发人员需要编写适当的代码来验证用户输入的数据,并能够处理各种可能的错误情况,以保证系统的稳定性和可靠性。 总之,ABAP开发在pp模块中需要掌握相关的知识和技术,包括pp模块的基础知识、ABAP语言特性、数据结构、报表和界面开发以及数据验证和错误处理等方面。只有掌握这些要点,才能够开发出高质量和高效率的pp模块程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值