如何在表达式后搜索字符串/变量

2020-09-02 02:14发布

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

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


嗨,

我正在研究一个程序,该程序可以优化报告,作为我大学的一个项目。 因此,它会扫描报告并尝试自动修复它们。 我将尝试通过一个例子来解释我的问题:

[随机码]

使用键bdatj = l_jah
bumon = l_mon二进制搜索将表l_t009b读入wa_t009b。

[随机码]

所以我的问题是,如何找到" bdatj"和" bumon"? 我尝试过这样的事情:

将报告v_name读入source_rep。

在table source_rep中忽略正则表达式'(WITH KEY =?)'的所有出现IGNORING CASE RESULTS results_tab。

但是,老实说,我不知道'密钥名称'就不知道如何获得密钥。

有想法吗?

问候

ABAP开发

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

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


嗨,

我正在研究一个程序,该程序可以优化报告,作为我大学的一个项目。 因此,它会扫描报告并尝试自动修复它们。 我将尝试通过一个例子来解释我的问题:

[随机码]

使用键bdatj = l_jah
bumon = l_mon二进制搜索将表l_t009b读入wa_t009b。

[随机码]

所以我的问题是,如何找到" bdatj"和" bumon"? 我尝试过这样的事情:

将报告v_name读入source_rep。

在table source_rep中忽略正则表达式'(WITH KEY =?)'的所有出现IGNORING CASE RESULTS results_tab。

但是,老实说,我不知道'密钥名称'就不知道如何获得密钥。

有想法吗?

问候

ABAP开发

付费偷看设置
发送
4条回答
My梦
1楼 · 2020-09-02 02:25.采纳回答

我认为您可以搜索read语句,然后从中得出列名:

 READ REPORT'您的报告'INTO来源。
 * sources = VALUE#((line ='使用键bdatj = l_jah将表l_t009b读取到wa_t009b中)
 *(行='xxxxx = aaaaa')
 *(line ='bumon = l_mon二进制搜索。')
 *)。
 在表源中查找正则表达式'(读取表)。*(带键)(。* \ =)'的所有事件
   在角色模式下
   忽略案例
   结果code_lines。
 "连接多个密钥
 循环至code_lines INTO DATA(code_line)。
   count = code_line-line。
   temp_result = VALUE#(src_line = code_line-line
                          tab_name = segment(val = condense(shift_left(val = sources [code_line-line] -line
                                                                          位= code_line-submatches [1] -offset + code_line-submatches [1] -length))
                                              指数= 1
                                              sep =``)
                          code_line =子字符串(val =来源[code_line-line] -line
                                                 off = code_line-submatches [3] -offset))。
   APPEND temp_result至temp_results分配字段符号()。
   当count <=行(源)。
     如果shift_left(val =  -code_lineplaces = strlen( -code_line -1)='。'。
       出口。
     其他。
       计数=计数+ 1。
        -code_line = | { -code_line} {condense(sources [count] -line)} |。
     万一。
   结束。
 结局。
 "获取密钥列
 循环到temp_results进入temp_result。
   清除:collect_tab。
   做。
     尝试。
         collect_tab = VALUE#(基本collect_tab(segment(val = condense(temp_result-code_line)
                                                            索引= sy-index
                                                            sep =``)))。
       捕捉cx_sy_strg_par_val。
         出口。
     ENDTRY。
   ENDDO。
   在table_line ='='处将LOOP AT在collect_tab放入DATA(word)中。
     最终=值#(基本最终(src_line = temp_result-src_line
                                   tab_name = temp_result-tab_name
                                   code_line = collect_tab [sy-tabix-1]))。
   结局。
 结局。
 
闻人可可
2楼-- · 2020-09-02 02:29

您应该看一下ATC附带的所有类以及AOC(git中提供的atc代码)

它不会修复您的代码,但是在那里 是扫描代码并确定问题的很多工具

歪着头看世界
3楼-- · 2020-09-02 02:24

我仍然认为您正在寻找正确的正则表达式(前提是每个ABAP语句都存储在一行中,因为 正则表达式一次仅适用于一行)。 但是自动完成所有这些操作需要花费大量时间,并且除非您为许多公司开发工具,否则与手动创建相比,我看不出自动创建该工具有什么好处。 此外,如果读取发生在循环内,那么在二进制搜索之前添加SORT可能适得其反...

me_for_i
4楼-- · 2020-09-02 02:38

好的,我通过一些循环/wa解决了我的问题/读取表格和很多IF。 不过,谢谢您的帮助!

一周热门 更多>