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

Trailing space in i to string conversion in ABAP

在 SAP 系统上,ABAP 版本 7.40 SP05,我刚刚在单元测试中遇到字符串比较失败,但两个字符串应该相同?!事实并非如此,因为之前从 i 到字符串的转换似乎会在其中一个字符串中产生额外的尾随 space。

此码位:

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}

转换后的尾部多了一个space。这是怎么发生的,我怎样才能防止这种情况发生在我到字符串的转换中?显然,像这样的东西让我调试了很长时间才能找到问题所在(因为除非我检查十六进制值,否则调试器不会显示额外的 space...)。

你无法阻止它。到目前为止,我在 ABAP 中发现的最佳方法是使用 CONDENSE s1

DATA i type i VALUE 12.
DATA idx TYPE string.
idx = i.       " idx = '12 '.
CONDENSE idx.  " idx = '12'.

要了解为什么首先添加 space,请查看 CONV 应用的 documentation on the default conversion rules

The character "-" is set at the last position for a negative value, and a blank is set for a positive value.

由于您不能将字符串表达式的 formatting optionsCONV 运算符一起使用,我建议更改代码以使用 |{ i }|(这可能是个好主意对于其他值也一样,因为无论如何在单元测试中比较日期/时间值时您可能需要一些格式设置选项。