更好地使用子字符串或子字段访问?

2020-09-08 21:53发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

论坛中最近有讨论,该函数 < 应该始终优先选择strong> substring(...) ,而不是规范的 文本+关闭(len) 构造("子字段访问"),例如,在该讨论" [您不应该使用老式的结构"。

演示代码示例,该示例实现等效的子字符串和text + off(len)构造:

 DATA子类型字符串。
 DATA(text)=`Hello world`。

 sub = substring(val = text off = 6 len = 5)。  "自7.02开始的新方法
 ASSERT sub ='world'。

 sub =文字+6(5)。  "子域访问已存在数十年
 ASSERT sub ='world'。

我真的对这种系统偏好感到怀疑,例如,当变量的类型为C且长度固定时,我更喜欢子字段访问而不是子字符串访问,以避免短转储STRING_LENGTH_TOO_LARGE:

 DATA子类型字符串。
 DATA(文本)= CONV Scarr-carrname('Air France')。" scarr-carrname = C型长度20

 尝试。
     sub = substring(val = text off = 5 len = 10)。
   捕获cx_sy_range_out_of_bounds INTO DATA(lx)。
 ENDTRY。
 ASSERT 1x被绑定。
 ASSERT sub =''。

 sub =文字+5(10)。
 ASSERT sub ='rance'。
 

就目前而言,我不能说我在这两者之间有偏好,两者都有优点和缺点。

您怎么看?

非常感谢。

桑德拉

@ 马修·比林汉姆

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

论坛中最近有讨论,该函数 < 应该始终优先选择strong> substring(...) ,而不是规范的 文本+关闭(len) 构造("子字段访问"),例如,在该讨论" [您不应该使用老式的结构"。

演示代码示例,该示例实现等效的子字符串和text + off(len)构造:

 DATA子类型字符串。
 DATA(text)=`Hello world`。

 sub = substring(val = text off = 6 len = 5)。  "自7.02开始的新方法
 ASSERT sub ='world'。

 sub =文字+6(5)。  "子域访问已存在数十年
 ASSERT sub ='world'。

我真的对这种系统偏好感到怀疑,例如,当变量的类型为C且长度固定时,我更喜欢子字段访问而不是子字符串访问,以避免短转储STRING_LENGTH_TOO_LARGE:

 DATA子类型字符串。
 DATA(文本)= CONV Scarr-carrname('Air France')。" scarr-carrname = C型长度20

 尝试。
     sub = substring(val = text off = 5 len = 10)。
   捕获cx_sy_range_out_of_bounds INTO DATA(lx)。
 ENDTRY。
 ASSERT 1x被绑定。
 ASSERT sub =''。

 sub =文字+5(10)。
 ASSERT sub ='rance'。
 

就目前而言,我不能说我在这两者之间有偏好,两者都有优点和缺点。

您怎么看?

非常感谢。

桑德拉

@ 马修·比林汉姆

付费偷看设置
发送
4条回答
灬番茄
1楼-- · 2020-09-08 22:30

在这个答案中,我将汇编社区给出的缺点和优点:

 SUBSTRING(VAL = TEXT TEXT + OFF(LEN)
                                      OFF = OFF LEN = LEN)
 ---------------------------------- ----------------  ----- -------------
 1.例外赶上赶上
    (C/D/T/STRING变量)
 ---------------------------------- ----------------  ----- -------------
 2.异常C变量要捕获不要捕获
  如果在尾随空格之后
 ---------------------------------- ----------------  ----- -------------
 3.简短-1 +1
 ---------------------------------- ----------------  ----- -------------
 4.静态形式的编译器检查否是
 ---------------------------------- ----------------  ----- -------------
 5.现代+1 -1
 ---------------------------------- ----------------  ----- -------------
 

每种情况的示例:

1。 异常超出范围(C/D/T/STRING变量)

 DATA子类型TYPE字符串。
 数据文本类型c长度10。

 尝试。
     sub = substring(val = text off = 5 len = 10)。
   捕获cx_sy_range_out_of_bounds INTO DATA(lx1)。
 ENDTRY。
 ASSERT lx1已绑定。  "例外

 尝试。
     sub =文字+5(10)。
   捕获cx_sy_range_out_of_bounds INTO DATA(lx2)。
 ENDTRY。
 ASSERT lx2已绑定。  " exception 

2。如果提取尾随空格,则为Exception C变量

 DATA子类型TYPE字符串。
 数据文本类型c长度10。
 text ='Hello'。
 尝试。
     sub = substring(val = text off = 0 len = 10)。
   捕获cx_sy_range_out_of_bounds INTO DATA(lx)。
 ENDTRY。
 ASSERT 1x被绑定。  "例外,因为文本被认为是5个字符长

 sub =文字+0(10)。  "没有例外

4。静态形式的编译器检查

 DATA子类型TYPE字符串。
 数据文本类型c长度10。
 sub = substring(val = text off = 5 len = 10)。  "没有语法错误
 sub =文字+5(10)。  "语法错误
d56caomao
3楼-- · 2020-09-08 22:19

您好 Sandra Rossi

您的问题就像哪个更好地用于读取内部表

 DATA(ls_str)= lt_  tab [lines(lt_tab)]。  LT_TAB为空时转储
 "该行未包含在表格中。
      将表lt_tab读入数据(ls_str)索引行(lt_tab)。
   " hier Sy-subrc = 4 ...当LT_TAB为空

最诚挚的问候

jovirus
4楼-- · 2020-09-08 22:41

Ebrahim Hatem 是的。尽管表表达式比子字符串更易于处理,因为它可以将其包装在VALUE#(... OPTIONAL)中。

一周热门 更多>