ABAP替换正则表达式的帮助

2020-08-29 17:28发布

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

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


嗨,我需要替换一个很长的字符串(长度为2000+)中找到的会计期间值YYYYPPP。 我有一个例程可以确定正确的会计期间来替换字符串中的当前值。

下面是其中包含"会计期间"条目的字符串的示例。 当前为" 2019001",但可以是任何值,需要替换。

因此,如果我总结一下,我需要替换以下字符串标记后立即找到的7位数字值
0FISCPER 1

有人知道如何创建ABAP正则表达式来完成此任务吗?
我正在尝试使用REGEX_TOY来完成此操作,但无济于事。

感谢您的任何想法。

 ...   0GL_ACCOUNT   3   0090000000   0099999999   ### <属性 >  0FISCPER   1   2019001    ... 

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

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


嗨,我需要替换一个很长的字符串(长度为2000+)中找到的会计期间值YYYYPPP。 我有一个例程可以确定正确的会计期间来替换字符串中的当前值。

下面是其中包含"会计期间"条目的字符串的示例。 当前为" 2019001",但可以是任何值,需要替换。

因此,如果我总结一下,我需要替换以下字符串标记后立即找到的7位数字值
0FISCPER 1

有人知道如何创建ABAP正则表达式来完成此任务吗?
我正在尝试使用REGEX_TOY来完成此操作,但无济于事。

感谢您的任何想法。

 ...   0GL_ACCOUNT   3   0090000000   0099999999   ### <属性 >  0FISCPER   1   2019001    ... 
付费偷看设置
发送
5条回答
haha101010
1楼-- · 2020-08-29 18:00

这是XML字符串。 建议您使用XML类库,然后更新该值。 然后,您可以使用Parse将其转换回去。

d56caomao
2楼-- · 2020-08-29 18:14

该xml格式的字符串,因此您应该使用sXML库进行读写操作,而不是替换。

haha101010
3楼-- · 2020-08-29 17:50

您好, 感谢您的输入!
这是我想出的解决方案。 可能不是最优雅或最合适的,但我想我会分享一下,以防它对任何人都有帮助。
这基本上从表VARI中读取(导入)程序UJD_TEST_PACKAGE_LINK或UJD_TEST_PACKAGE的ABAP变体,并使用新的FISCPER值更新PROMPT参数。 使用REPLACE REGEX找到并更新了该值。

我无法使用任何标准FM来读取ABAP变量参数值,因为该值的长度大于255,并且以加扰的格式存储,因此我不得不对表使用IMPORT/EXPORT VARI。
希望有所帮助。

数据:VARD_KEY开头,
         报告TYPE raldb_repo,
         变体TYPE raldb_vari,
       END OF varid_key。
 数据:lv_prompt TYPE字符串,
       lv_src_token TYPE字符串,
       lv_tgt_token TYPE字符串,
       lv_date TYPE基准面,
       lv_fiscper TYPE/bi0/oifiscper,
       lv_offset_char类型rvari_val_255,
       lv_offset_int TYPE i,
       lo_fm类型参考zcl_fm_wrapper。

 参数:p_report类型raldb_repo默认值'UJD_TEST_PACKAGE_LINK'。
 参数:p_varnt类型raldb_vari。

 选择开始。
   lo_fm = NEW#()。

   从tvarvc中选择LOW到LV_offset_char,其中WHERE名称='ZPKG_LINK_DAY_OFFSET'。
   如果sy-subrc = 0。
     lv_offset_int = CONV int4(lv_offset_char)。
     lv_date = sy-datum-lv_offset_int。
   万一。

   lv_fiscper = lo_fm-> convert_date_to_fiscper(i_date = lv_date i_periv ='V3')。
   lv_src_token ='( 0FISCPER   1  )(\ d {7})'。
   lv_tgt_token = |  0FISCPER   1   {lv_fiscper} |。

   varid_key-report = p_report。
   varid_key-variant = p_varnt。
   IMPORT提示从数据库到lv_prompt vari(va)ID varid_key。
   用lv_tgt_token替换正则表达式lv_src_token在lv_prompt中。
   将提示从lv_prompt导出到数据库vari(va)ID varid_key。
 
灬番茄
4楼-- · 2020-08-29 17:56

不确定在BPC转换文件中如何实现相同的逻辑。
所以您是说转换可以改变会计期间的软件包选择吗?
我愿意接受任何有助于该原因的建议...谢谢

梦想连接
5楼-- · 2020-08-29 18:13

最好使用xml库读取/写入提示值,您可以在该程序本身中看到子例程PARSE_PROMPT_XML,SAP如何解析提示参数。

一周热门 更多>