我有一个字符串列表,例如:
约翰
约翰·多伊
彼得潘
在 .txt 文件中。
我想创建一个循环来检查某个名称是否存在。但是,如果我搜索“彼得”并且只存在“彼得潘”,我不希望它是真的。每条线都必须是完全匹配的。
我有一个字符串列表,例如:
约翰
约翰·多伊
彼得潘
在 .txt 文件中。
我想创建一个循环来检查某个名称是否存在。但是,如果我搜索“彼得”并且只存在“彼得潘”,我不希望它是真的。每条线都必须是完全匹配的。
呵呵,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%
}
如果您的名称以不同的顺序排列,您可能必须更改解析循环的分隔符,或者使用正则表达式而不是简单的比较。
如果要检查多个名称,请使用trie。如果您只有一个名称,则可以使用KMP。
我将为您要检查存在的多个名称解释这一点,因为只有一个,Wikipedia 上提供的示例就足够了,您可以应用相同的想法。
根据您要查找的名称构造所述的 trie,并且对于文件中的每一行,逐个字符遍历 trie,直到找到最终节点。
奖励:trie 被Aho-Corasick算法使用,它是 KMP 对多种模式的扩展。阅读它。这是非常值得的。
更新:
要检查是否存在单个名称,请对要查找的名称进行哈希处理,然后逐行读取文本文件。对于每一行,使用相同的函数对其进行散列,并将其与您要查找的行进行比较。如果它们相等,则逐个字符地比较字符串。您需要这样做以避免误报(请参阅哈希冲突)