【问题标题】:Determine if string exists in file确定文件中是否存在字符串
【发布时间】:2013-07-28 00:44:08
【问题描述】:

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

约翰

约翰·多伊

彼得潘

在 .txt 文件中。

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

【问题讨论】:

    标签: autohotkey


    【解决方案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%
    }
    

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

    【讨论】:

      【解决方案2】:

      如果您想检查多个名称,请使用trie。如果你只有一个名字,你可以使用KMP

      我会为您要检查存在的多个名称解释这一点,因为只有一个,维基百科上提供的示例就足够了,您可以应用相同的想法。

      根据您要查找的名称构造上述 trie,并针对文件中的每一行,逐个字符遍历 trie,直到找到最终节点。

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

      更新:

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

      【讨论】:

      • 谢谢。这更多的是关于 AHK 中可能发生的问题,而不是一般算法问题。 - 每个名称都存储在 .txt 文件的单独一行中。我想检查一个名字是否存在。
      猜你喜欢
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多