在工作编程的时候,有朋友给我介绍了一个很有意思的案例:有一个表,里面有通配符的值,比如“ test ”。该寄存器能够找到其中包含'test'
的单词,因为单词之前或之后的内容无关紧要。
还有另一个表,其中包含具有所需文本的寄存器,'this is a test'
例如。
常规访问首选项是从通配符表到文本表,但这在我朋友的情况下是不可能的。
他实际上提出了一个解决方案,但它并不觉得它可能是最好的。
他的想法是选择每个通配符寄存器和所需的每个文本。然后,他将从通配符表中删除文本表中没有匹配目标的每个寄存器,因为它已经正确并且只包含相关值。
在 ABAP 中,这可以写成:
data:
wa_wildcard type string,
t_wildcards type table of string,
t_texts type table of string,
wa_text type string,
lv_index type sy-tabix,
lv_found type c.
select * from zt_texts into table t_texts. "Retrieves desired texts.
check sy-subrc is initial.
select * from zt_wildcards into table t_wildcards. "Retrieves all widlcards.
check sy-subrc is initial.
loop at t_wildcards into wa_wildcard. "Checks every Wildcard
move lv_index to sy-tabix. "Stores the iteration index for Wildcard table.
loop at t_texts into wa_text. "Checks if the actual wildcard matches any text retrieved.
if wa_text cp wa_wildcard-value. "If text contain parts of the wildcard string, it matches
move 'X' to lv_found. "Found a match, may exit the loop!
exit.
endif.
endloop.
if lv_found ne 'X'.
delete t_wildcards index lv_index. "removes the wildcard if no match was found.
endif.
endloop.
由于这是在 ABAP 中完成的,我认为会有一个 select 语句能够直接在数据库中执行此验证过程,因为通配符表可能太大而无法选择所有内容、迭代和处理。
编辑:一般的想法是使用文本为其找到合适的通配符,而不用每个文本测试每个通配符。我想知道这是否可以在任何解决方案中实现,无论是面向数据库的,即在选择语句中还是在纯代码中。