【问题标题】:How to delete space in character text?如何删除字符文本中的空格?
【发布时间】:2020-11-13 17:39:51
【问题描述】:

我编写了一个自动从系统中提取时间相关信息的代码。如表中所示,将 t247 月份名称的长度固定为 10 个字符。但在报告屏幕上显示时图像不好。

我这样打印:

  WRITE : 'Bugün', t_month_names-ltx, ' ayının'.
  CONCATENATE gv_words-word '''nci günü' INTO date.
  CONCATENATE date ',' INTO date.
  CONCATENATE date gv_year INTO date SEPARATED BY space.
  TRANSLATE   date TO LOWER CASE.

我尝试了CONDENSE t_month_names-ltx NO-GAPS.的方法来删除空格,但是还不够。

在WRITE之后,我可以通过设置空白值来静态写入:

  WRITE : 'Bugün', t_month_names-ltx.
  WRITE : 14 'ayının'.
  CONCATENATE gv_words-word '''nci günü' INTO date.
  CONCATENATE date ',' INTO date.
  CONCATENATE date gv_year INTO date SEPARATED BY space.
  TRANSLATE   date TO LOWER CASE.

但这不是正确的用法。如何动态实现这一点?

【问题讨论】:

  • 您目前收到Bugün Temmuz ayının yirmidört'nci günü, 2020Bugün Temmuz ayının yirmidört'nci günü, 2020。请问您期望什么确切的文字?此外,您希望此文本存储在变量中还是使用 WRITE 输出?
  • CONDENSE 为我工作,即使没有NO-GAPSdate 字段的类型是什么?它应该是字符串,而不是字符

标签: date concatenation abap write


【解决方案1】:

您可以使用 STRING 类型的临时字段:

DATA l_month TYPE STRING.

l_month = t_month_names-ltx.

WRITE : 'Bugün', l_month.
WRITE : 14 'ayının'.
CONCATENATE gv_words-word '''nci günü' INTO date.
CONCATENATE date ',' INTO date.
CONCATENATE date gv_year INTO date SEPARATED BY space.
TRANSLATE   date TO LOWER CASE.

【讨论】:

    【解决方案2】:

    您不能从 TYPE C 字段中删除尾随空格,因为它的长度是恒定的。未使用的长度总是用空格填充。

    但是在你组装好你的字符串之后,你可以使用CONDENSE而不用 NO-GAPS 来删除字符串中任何超过一个空格的链。

    在您编写的代码下方添加CONDENSE date.,您应该会得到您想要的结果。

    另一种选择是放弃CONCATENATE并使用string templates|符号内的字符串文字)代替字符串组装,它没有包含TYPE C字段尾随空格的烦人习惯:

    DATA long_char TYPE C LENGTH 128.
    long_char = 'long character field'.
    
    WRITE |this is a { long_char } inserted without spaces|.
    

    输出:

    this is a long character field inserted without spaces
    

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多