ABAP - 变量杂例2

2024-01-19 16:52
文章标签 变量 abap 杂例

本文主要是介绍ABAP - 变量杂例2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

** 不同类型变量间的赋值与比较 -->数据转换
** 不同的数据类型的变量之间赋值或比较,会自动进行类型的转换;
** SAP变量数据类型的自动转换:
** 不同变量数据类型值比较时,由数据类型和数据类型的优先级决定
**    1.如果一个变量是I类型,则另一个变量转换为类型I
**    2.如果一个变量是P类型,则另一个变量转换为类型P.
**    3.如果一个变量是D类型,则另一个变量转换为类型D.
**    4.如果一个变量是N类型,另一个变量类型是C或X,则两个变量都转换成P类型
**    5.如果一个变量类型是C,另一个变量类型是X,则X类型转换为类型C.
**    即C类型变量和N类型变量比较或赋值时 两个变量类型都会转换成P类型
**      N类型变量和P类型变量或I类型变量比较或赋值时会向上类型转换成P类型或I类型
**      P类型变量和I类型变量比较或赋值时 P类型转换成I类型
** 注意:这里的类型转换仅仅是在SAP编译器在编译指令时把变量存储的值的类型做了转换
**      变量本身类型不变.
** 转换过程遵照固定的规则,如C类型的变量赋值给N类型的变量,只有数字字符被传递,其他忽略
** C类型的变量不能直接赋值给I类型的变量,需要C->N->I.
** char10是系统内置的数据类型 表示长度为10位长度C类型
DATA lv_char01   TYPE char10 VALUE 'ABCDE12345'.
DATA lv_char02   TYPE char10 VALUE '1234567890'.
DATA lv_char03   TYPE char10 .
DATA lv_num(10)  TYPE n.DATA lv_int01(10) TYPE i.
** int2是系统内置的数据类型 表示长度为5位的数据整数 每一位占据两个字节
DATA lv_int02     TYPE int2.lv_num   = lv_char02.
lv_int01 = lv_num.
WRITE:/ 'LV_NUM:',lv_num.
WRITE:/ 'LV_INT:',lv_int01.** LV_INT2 = LV_CHAR. 会报错类型不匹配
lv_num   = lv_char01.
lv_int02 = lv_num.
WRITE:/ 'LV_NUM:',lv_num.
WRITE:/ 'LV_INT:',lv_int02.** I类型的变量可以直接赋值给C类型的变量
lv_char03 = lv_int02.
WRITE:/ 'LV_CHAR03',lv_char03.** 算术运算符 ( + - * / DIV MOD DIV等效于 '/' )
DATA lv_char04 TYPE c LENGTH 3 VALUE '999'.
DATA lv_char05 TYPE c LENGTH 3 VALUE '888'.
DATA lv_char06 TYPE c LENGTH 3.
DATA lv_num03(3) TYPE n.
DATA lv_int03(3) TYPE i.
DATA lv_p03(3)   TYPE p.
DATA lv_f03      TYPE f.
** 加法和减法运算类似 注意接收变量长度
lv_char06 = lv_char04 - lv_char05.
lv_num03  = lv_char04 - lv_char05.
lv_int03  = lv_char04 - lv_char05.
lv_p03    = lv_char04 - lv_char05.
lv_f03    = lv_char04 - lv_char05.
WRITE:/ 'LV_CHAR06:',lv_char06.
WRITE:/ 'LV_NUM03:',lv_num03.
WRITE:/ 'LV_INT03:',lv_int03.
WRITE:/ 'LV_P03:',  lv_p03.
WRITE:/ 'LV_F03:',  lv_f03.DATA lv_num04(3) TYPE n.
DATA lv_int04(3) TYPE i.
DATA lv_p04      TYPE p DECIMALS 2.
DATA lv_f04      TYPE f.** N和I类型的变量 不会接收小数
lv_num04 = lv_char04 / '3.3'.
lv_int04 = lv_char04 / '3.3'.
** 除法(div /)
lv_p04   = lv_char05 / '4.4'.
lv_f04   = lv_char05 / 4.
WRITE:/ 'LV_NUM04:',lv_num04.
WRITE:/ 'LV_INT03:',lv_int04.
WRITE:/ 'LV_P04:',  lv_p04.
WRITE:/ 'LV_F04:',  lv_f04.DATA lv_num05(3) TYPE n.
DATA lv_int05(3) TYPE i.
DATA lv_p05      TYPE p DECIMALS 2.
DATA lv_f05      TYPE f.**MOD 取余运算符
lv_num05 = 10 MOD 3.
lv_int05 = 8 MOD 2.
**SKIP SAP内置函数 跳一行
SKIP.
WRITE:/ 'LV_NUM05:',lv_num05.
WRITE:/ 'LV_INT05:',lv_int05.**乘法 *
lv_p05 = 10 * '0.22'.
lv_f05 = '3.3' * 5.
WRITE:/ 'LV_P05:',lv_p05.
WRITE:/ 'LV_F05:',lv_f05.
SKIP.
** 在SAP中可以用(Add  To 、Subtract from、Multiply by、Divide by)表示+ - * /
DATA lv_int06(4) TYPE i VALUE 8.
DATA lv_int07(4) TYPE i VALUE 2.
WRITE:/ 'LV_INT06初始值:.',lv_int06.
** 等效于8 + 4
ADD 4 TO lv_int06.
WRITE:/ 'ADD 4 TO LV_INT06,LV_INT06:',lv_int06.
** 等效于12 - 2
SUBTRACT lv_int07 FROM lv_int06.
WRITE:/ 'SUBTRACT LV_INT06 FROM LV_INT07:',lv_int06.
** 等效于 10 * 3
MULTIPLY lv_int06 BY 3.
WRITE:/ 'MULTIPLY LV_INT06 BY LV_INT07:',lv_int06.
** 等效于 30 DIV 6 或者 24 / 6
DIVIDE lv_int06 BY 6.
WRITE:/ 'DIVIDE LV_INT06 BY 6:',lv_int06.
SKIP.** 比较运算符
** 等于:  = 或 EQ
** 不等于:<> 或 >< 或 NE
** 大于:   > 或 Gt
** 小于:   < 或 Lt
** 大于等于 >= 或 GE
** 小于等于 <= 或 LE
** a1 BetWEEN a2 AND a3 检查a1是否在a2和a3之间(包括)。
** 是初始值 IS INITIAL  如果变量的内容没有改变,并且它已被自动赋予其初始值,则条件为真。
** 不是初始值IS NOT INITIAL判断条件和IS INITIAL相反 即变量的初始值** 比较运算符可以结合逻辑运算符使用
** 这两种运算符 一般单配条件判断语句使用** 以 > 为例 其他运算符可以自己尝试写一下 动手才是最好的老师
** 除了Between And、IS INITIAL、IS NOT INITIAL
IF 3 > 2.
** 如果3>2这个入口条件为真 就会执行 IF ...ENDIF.里面的语句WRITE: /'3确实大于2'.
ENDIF.** a1 BetWEEN a2 AND a3 是  等效于a2 <= a1 <= 13 相当于数学的[]
IF 8 BETWEEN 6 AND 9.WRITE: /'8确实在[6-9]区间内'.
ENDIF.IF 6 BETWEEN 6 AND 9.WRITE: /'6确实在[6-9]区间内'.
ENDIF.**IS INITIAL IS NOT INITIAL 变量的比较运算符
DATA lv_kk01 TYPE c LENGTH 4.
IF lv_kk01 IS INITIAL.WRITE:/ '变量只是声明 并没赋值'.
ENDIF.
lv_kk01 = '8801'.
IF lv_kk01 IS NOT INITIAL.WRITE:/ '变量已声明 并且已赋值'.
ENDIF.
SKIP.** 逻辑运算符 [与(adn) 或(or) 非(not)]
** OR 当条件入口中的判断条件中至少一个为真时 就会进入IF ENDIF 执行WRITE语句
** 3>1为真 7<9为真 8>10为假 条件判断为:真 OR 真 OR 假
IF 3 > 1 OR 7 < 9 OR 8 > 10.WRITE: /'嘿嘿,至少有一个为真,我进来辣。'.
ENDIF.
** AND 当条件入口中的判断条件中必须全部为真时 才会进入IF ENDIF 执行WRITE语句
** 2>1为真 7<8为真 6>5为真 条件判断为:真 AND 真 AND 真
IF 2 > 1 AND 7 < 8 AND 6 > 5.WRITE:/'哈哈,全都是真的'.
ENDIF.
** NOT 否定入口条件的真假
** 1>2 为假 加了NOT 判定条件为真.
IF NOT 1 > 2.WRITE:/'真真假假,傻傻分不清楚'.
ENDIF.SKIP.
** 按位运算符 日常开发中几乎不用
** BIT-NOT
** BIT-AND
** BIT-XOR
** BIT-OR** 常用的算术运算函数
** ABS   返回变量的绝对值
** SIGN  返回变量的的符号:正数返回1,0返回0,负数返回-1
** CEIL  如果变量的值带有小数 则向上取整
** FLOOR 如果变量的值带有小数 则向下取整
** TRUNC 返回输入参数的整数部分
** FRAC  返回输入参数的小数部分
** STRLEN 获取字符串长度函数 只能是C N D T StirngDATA lv_kk02 TYPE p LENGTH 4 DECIMALS 2 VALUE '-8889.50'.
WRITE:/ 'lv_kk02调用ABS函数的返回值', ABS( lv_kk02 ).
WRITE:/ 'lv_kk02调用SIGN函数的返回值', SIGN( lv_kk02 ).
WRITE:/ 'lv_kk02调用CEIL函数的返回值', CEIL( lv_kk02 ).
WRITE:/ 'lv_kk02调用FLOOR函数的返回值', FLOOR( lv_kk02 ).
WRITE:/ 'lv_kk02调用TRUNC函数的返回值', TRUNC( lv_kk02 ).
WRITE:/ 'lv_kk02调用FRAC函数的返回值', FRAC( lv_kk02 ).
WRITE:/ '123456调用STRLEN函数的返回值', STRLEN( '123456   ' ).
SKIP.
** 字符串运算符
** CO(仅包含)       检查A是否仅由B中的字符组成       A和B比较的时候区分大小写 区分尾部空格
** CN(不仅包含)     检查A是否不仅由B中的字符组成     A和B比较的时候区分大小写 区分尾部空格
** CA(包含任何)     检查A是否包含B中的任一字符       A和B比较的时候区分大小写 区分尾部空格
** NA(不包含任何)   检查A是否不包含B中的任一字符     A和B比较的时候区分大小写 区分尾部空格
** CS(包含字符串)   检查A是否包含B中的全部字符       A和B比较的时候不区分大小写 不区分尾部空格
** NS(不包含字符串) 检查A是否不包含B中的全部字符     A和B比较的时候不区分大小写 不区分尾部空格
** CP(符合模式)     检查A是否符合B的模式             A和B比较的时候不区分大小写 不区分尾部空格
** NP(不符合模式)   检查A是否不符合B的模式           A和B比较的时候不区分大小写 不区分尾部空格
DATA:s1      TYPE string,s2      TYPE string,lv_flag TYPE abap_bool.
s1 = `abc哈哈`.
s2 = `abc哈哈abc`.
** S1 CO S2,S1的'abc哈哈'是否可以在S2中找到 xsdbool(条件为真返回 abap_true 为假返回abap_false)。
lv_flag =  xsdbool( s1 CO s2 ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 CO S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CO S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abc哈哈abcd`.
s2 = `abc哈哈abc`.
** S1 CN S2, S1中有d S2中没有 即S1不包含于S2
lv_flag =  xsdbool( s1 CN s2 ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 CN S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CN S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abcd`.
s2 = `e`.
** S1 CN S2, S1中的字符至少可以在S2中找到一个
lv_flag =  xsdbool( s1 CA s2 ). "为假
IF lv_flag = abap_true.WRITE:/ 'S1 CA S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CA S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abcd`.
s2 = `e`.
** S1 NA S2, S1不包含S2的任意一个字符
lv_flag =  xsdbool( s1 NA s2 ). "为假
IF lv_flag = abap_true.WRITE:/ 'S1 NA S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 NA S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abap`.
s2 = `abp`.
** S1 CS S2, S1中可以找到连续完整的跟S2一样的字符
lv_flag =  xsdbool( s1 CS s2 ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 CS S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CS S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abpa`.
s2 = `abp`.
** S1 CS S2, S1中找不到连续完整的跟S2一样的字符
lv_flag =  xsdbool( s1 NS s2 ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 NS S2为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 NS S2为假'.
ENDIF.** 清空lv_flag,s1,s2的内容 回到变量初始定义的状态
CLEAR:lv_flag,s1,s2.
s1 = `abc`.
** *匹配多个字符
** +匹配一个字符
** #字符操作中的转义符
** S1 CP S2, S1符合 某种模式
lv_flag =  xsdbool( s1 CP 'a*' ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 CP a*模式为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CP a*模式为假'.
ENDIF.lv_flag =  xsdbool( s1 CP 'a++' ). "为真
IF lv_flag = abap_true.WRITE:/ 'S1 CP a++模式为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CP a++模式为假'.
ENDIF.** 如果需要区分大小写、(+ - * /)、和空格,则需要通过#号进行转译
s2 = `abC`.
lv_flag =  xsdbool( s2 CP 'ab#C' ). "要求ab为小写 C为大写 为真
IF lv_flag = abap_true.WRITE:/ 'S2 CP ab#C模式为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CP ab#C模式为假'.
ENDIF.s2 = `a+b-Cde`.
** 要求a后面的第一个字符为+号 +号后以为为任意一个字符 第四位为-号第五位C为大写 C后面的为任意字符
lv_flag = xsdbool( s2 CP 'a#++#-#C*').
IF lv_flag = abap_true.WRITE:/ 'S2 CP a#++#-#C*模式为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CP a#++#-#C*模式为假'.
ENDIF.s2 = 'a  '.
** 匹配空格
lv_flag = xsdbool( s2 CP 'a# ').  "要求a后面一位是空格 b后面一位是空格
IF lv_flag = abap_true.WRITE:/ 'S2 CP a# b# 模式为真'.
ELSEIF lv_flag = abap_false.WRITE:/ 'S1 CP a# b# 模式为假'.
ENDIF.** NP和CP用法一样 不同的是

这篇关于ABAP - 变量杂例2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623064

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。

Python学习1--变量和简单数据

经过这一段时间的学习,将Python相关的知识点记录下来,好记性不如烂笔头嘛。 本文主要参考了《Python编程从入门到实践》以及唐宇迪老师的教程《Python快速入门视频课程》,然后在博主http://www.cnblogs.com/liubinsh/p/6937409.html的基础上总结而成,特此感谢! 第二章 变量和简单数据类型 什么是变量 这里的message就是变量,

配置JAVA环境的时候,环境变量中administrator的用户变量和系统变量的区别?

迁移项目到新的服务器上: 需要Java运行环境时,经常要配置环境变量,如图所示 这里有administrator的用户变量(U),和系统变量(S), 那么,它们之间有什么区别呢? 简单的说,一个是当前用户使用,你用其它用户登陆,这个环境变量就不起作用了。 系统变量,是对所有用户都可使用的。 简单的说: 系统变量:不管以哪个用户名登陆到计算机都能使

不设临时变量交换a,b的值

常规的做法: int tmp = a; a = b; b = tmp; 不设中间变量的方法: a = a + b; b = a - b; a = a - b;

【C/C++】变量命名规范

在 C++ 中,为 bool 类型的变量命名时,通常遵循以下命名规范,以确保代码的可读性和一致性: 表示状态或条件: 使用 is 前缀表示某个状态或条件,例如 isReady、isValid。使用 has 前缀表示是否拥有某个属性,例如 hasData、hasError。使用 can 前缀表示是否具备某种能力,例如 canExecute、canRead。使用 should 前缀表示是否应该执行