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

ABAP中i到字符串转换中的尾随空格,abap,Abap,在SAP系统ABAP版本7.40 SP05上,我刚刚在字符串比较的单元测试中遇到了一个失败,但是两个字符串应该是相同的?!事实并非如此,因为之前从i到string的转换似乎在其中一个字符串中产生了额外的尾随空间 此代码位: DATA(i) = 111. DATA(s1) = CONV string( i ). DATA(s2) = '111'. DATA(s3) = |111|. 产生(如调试器中所示): 转换后的一个具有额外的尾随空间。这是如何发生的?我如何防止在I到字符串转换中发生这种情况

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

此代码位:

DATA(i) = 111.
DATA(s1) = CONV string( i ).
DATA(s2) = '111'.
DATA(s3) = |111|.
产生(如调试器中所示):


转换后的一个具有额外的尾随空间。这是如何发生的?我如何防止在I到字符串转换中发生这种情况?很明显,这样的东西让我花了很长时间进行调试以找到问题所在(因为除非我检查十六进制值,否则调试程序不会显示额外的空间…。

您无法阻止它。到目前为止,我在ABAP中找到的最好的方法是使用
压缩s1

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

要了解首先添加空格的原因,请检查由
CONV
应用的:

字符“-”设置在负值的最后一个位置, 并且为正值设置空白


由于不能将字符串表达式的形式与
CONV
运算符一起使用,因此我建议将代码更改为使用
{I}
(这对于其他值也是一个好主意,因为在单元测试中比较日期/时间值时,您可能需要一些格式选项).

由于引入了更多面向表达式的ABAP构造,我倾向于避免使用concure之类的东西。好了,没有操作数位置与concure等价,比如trim()函数等等。问题是我喜欢为表达式提出冗长而复杂的格式,而concure不能成为其中的一部分…从7.50开始,现在有一个(格式看起来像
concure(val=…)
:谢谢,我在文档中错过了这一点,我今天看到的是同一页,pfff。。。
DATA i type i VALUE 12.
DATA idx TYPE string.
idx = i.       " idx = '12 '.
CONDENSE idx.  " idx = '12'.