在“COND”语句中使用“REPLACE”

ise*_*aou 2 abap

我正在尝试根据某些条件使用 替换字符串中的子字符串COND #。但不确定REPLACE在语法中的何处合并。

正常代码:

DATA(v_string) = 'My string &1 &2'.

IF v_string CA '&1'.
  REPLACE '&1' WITH 'sub1' in v_string.
ELSEIF v_string CA '&2'.
  REPLACE '&2' WITH 'sub2' in v_string.
ENDIF.
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 ABAP 7.5 语法来实现相同的目标。

v_string = COND #( WHEN v_string CA '&1' THEN REPLACE '&1' WITH 'sub1' in v_string
                   WHEN v_string CA '&2' THEN REPLACE '&2' WITH 'sub2' in v_string ).
Run Code Online (Sandbox Code Playgroud)

获得所需结果的正确语法是什么?

pet*_*ulb 6

根据文档THEN operand必须是 a a general expression position,其定义为

还可以指定构造函数表达式、表表达式、计算表达式、内置函数、函数方法或方法链接(与合适的数据对象一起)的读取位置。

这意味着REPLACE不可用,但您可以使用内置字符串函数replace

v_string = COND #( 
  WHEN contains( val = v_string sub = '&1' ) 
    THEN replace( val = v_string sub = '&1' with = 'sub1' occ = 1 )
  WHEN contains( val = v_string sub = '&2' ) 
    THEN replace( val = v_string sub = '&2' with = 'sub2' occ = 1 )
).
Run Code Online (Sandbox Code Playgroud)