确定文件中是否存在字符串

时间:2013-07-27 23:28:55

标签: autohotkey

我有一个字符串列表,例如:

  

约翰

     

John Doe

     彼得潘

在.txt文件中。

我想创建一个循环,检查是否存在某个名称。但是,如果我搜索“彼得”并且只有“彼得潘”存在,我不希望它成立。每一行都必须完全匹配。

2 个答案:

答案 0 :(得分:1)

哈哈,ep0的答案非常复杂!

但是,您希望使用类似于此的解析循环(此示例期望您的名称由回车符分隔)。请考虑您有一个文本文件,其内容排列如下:

John
Harry
Bob
Joe

这是你的脚本:

fileread, thistext, %whatfile%  ;get the text from the file into a variable
;Now, loop through each line and see if it matches your results:

loop, parse, thistext, `r`n, `r`n
{
  if(a_loopfield = "John")
     msgbox, Hey! It's John!
  else
     msgbox, No, it's %a_loopfield%
}

如果您的名字以不同的顺序排列,您可能需要更改解析循环的分隔符,或者使用正则表达式而不是简单的比较。

答案 1 :(得分:0)

如果要查看多个名称,请使用trie。如果您只有一个名称,则可以使用KMP

我会为你要检查的多个名称解释这个,因为只有一个,维基百科上提供的例子绰绰有余,你可以应用相同的想法。

根据您想要查找的名称构造所述trie,并为文件中的每一行逐个遍历trie,直到您到达最终节点。

BONUS:trie由Aho-Corasick算法使用,这是KMP对多个模式的扩展。阅读它。这非常值得。

更新:

要检查是否存在单个名称,hash您要查找的名称,请逐行阅读文本文件。对于每一行,使用相同的函数对其进行散列,并将其与您要查找的函数进行比较。如果它们相等,则逐个字符地比较字符串。您需要这样做以避免误报(请参阅哈希冲突)