在SAP系统上,ABAP版本7.40 SP05,我刚刚遇到字符串比较单元测试失败,但两个字符串应该相同?!原来并非如此,因为之前从i转换为字符串似乎会在其中一个字符串中产生额外的尾随空格。
此代码位:
DATA(i) = 111.
DATA(s1) = CONV string( i ).
DATA(s2) = '111'.
DATA(s3) = |111|.
生成(如调试器中所示):
S1 111 3100310031002000 CString{4}
S2 111 310031003100 C(3)
S3 111 310031003100 CString{3}
转换后的版本有一个额外的尾随空格。这是如何发生的,如何防止这种情况发生在字符串转换中?显然这样的东西让我调试了很长时间才找到了什么(因为除非我检查十六进制值,否则debuger没有显示额外的空间......)。
答案 0 :(得分:4)
要了解首先添加空格的原因,请查看CONV
应用的documentation on the default conversion rules:
角色" - "被设置在负值的最后位置, 并为空值设置空白。
由于您无法将formatting options字符串表达式与CONV
运算符一起使用,因此我建议您更改代码以使用|{ i }|
(可能是其他值也是个好主意,因为在比较单位测试中的日期/时间值时你可能需要一些格式化选项。)
答案 1 :(得分:1)
你无法阻止它。我在ABAP中找到的最好方法是使用CONDENSE s1
DATA i type i VALUE 12.
DATA idx TYPE string.
idx = i. " idx = '12 '.
CONDENSE idx. " idx = '12'.