i中的尾随空格到ABAP中的字符串转换

时间:2015-12-04 07:22:04

标签: abap

在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没有显示额外的空间......)。

2 个答案:

答案 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'.