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 options 与 CONV
运算符一起使用,我建议更改代码以使用 |{ i }|
(这可能是个好主意对于其他值也一样,因为无论如何在单元测试中比较日期/时间值时您可能需要一些格式设置选项。
在 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 options 与 CONV
运算符一起使用,我建议更改代码以使用 |{ i }|
(这可能是个好主意对于其他值也一样,因为无论如何在单元测试中比较日期/时间值时您可能需要一些格式设置选项。