识别列表中几乎相同的消息

Identifying nearly identical messages in list

看起来是个简单的任务,但是你会怎么解决呢?我现在没有得到任何解决方案。

ls_message-text = 'Pernr. 12345678 (Pete Peterson) is valid (06/2015).
append ls_message to lt_message.

ls_message-text = 'Pernr. 12345678 (Pete Peterson) is valid (07/2015).
append ls_message to lt_message.

这是我得到的代码,问题是,这是我在我的应用程序中显示的消息。客户说这 2 条消息是一样的。第二个应该删除。

你会如何比较删除行? table 可能包含超过 2 行,并且还包含其他文本,例如 "is not valid"。

我无法将结构扩展到更多的字段进行比较,我只能在这一字段上使用字符串比较。是否可以使用正则表达式或其他方式进行字符串比较?

您是否尝试过编程 DEMO_REGEX_TOY。 提供有关如何使用正则表达式的想法,这可能会解决问题

假设您只想为每个唯一的 Pernr 保留一条消息。在 lt_message 中,您可以使用正则表达式来过滤 Pernr。并将其用作 "key"。现在您可以删除除 lt_message 中与此键匹配的第一条消息以外的所有消息。

如果您只想保留某些消息,请扩展您的正则表达式,例如只有 "is valid" 个。

也许您可以使用 Levenshtein 距离来解决您的要求。 ABAP 有一个内置函数 "distance",它为您提供将一个字符串转换为另一个字符串的操作次数。例如:

   DATA msg1 type string.
   DATA msg2 type string.

   msg1 = 'Levehnstein Distance 7/2015'.

   msg2 = 'Levehnstein Distance 6/2015'.

   data l_distance type i.

   l_distance = distance( val1 = msg1 val2 =  msg2 ).


   if l_distance lt 2 .
    "It's almost the same text
    endif.

在这种情况下l_distance将为1,因为只需要一个操作(替换)。

希望对您有所帮助,