在文本文件中查找字符串的最快方法是什么?案例场景:在列出大约50000个文件路径的文本文件中查找特定路径(每个路径都有它自己的行)。在文本文件中查找子串的最快方法
0
A
回答
2
这个大小的文件应该很容易适应内存,并且可以将它作为它的项目作为std :: set(或者甚至更好的哈希集合,如果有库的话)。检查一条确切的路径是否会非常快。
如果您还需要查找子路径,排序的std :: vector(如果您只查找前缀)可能是唯一有用的方法 - 或者如果您正在寻找完整的一般子串的路径,那么无论如何你都需要扫描所有的矢量,但除非你必须做数十亿次,即使这样也不会太坏。
0
这是正则表达式的字段;你应该看看grep和awk。
2
您是否必须在文件中找到一个字符串,同一个字符串在多个文件中重复出现,同一个文件中有多个字符串?
根据情况,你有几个可能的答案。
构建数据stucture(如由亚历克斯提议下集)是有用的,如果你有使用像Boyer-Moore的算法是有效的,如果你要搜索找到在同一个文件
几串一个字符串
使用正则表达式引擎可能会更好,如果你必须搜索几个字符串。
0
我不确定你想使用搜索的程度,但是FSM是很好的选择。
这里是讨论:Short example of regular expression converted to a state machine?
相关问题
- 1. 使用java在文本文件中查找字符串的最快方法
- 2. 在文件中查找字符串的最快方法
- 3. 在Java中逐行读取文本文件的最快方法
- 4. 在文本文件中搜索字符串的更快方法
- 5. 在xhtml文档中查找特定单词的最快方法
- 6. 在另一个字符串中查找字符串子集的最快方法?
- 7. 最快的方法来检查NodeJs中的文件的存在
- 8. 在文件中搜索字符串的最快方法
- 9. 在内存中加载文本文件的最快/最干净的方法
- 10. 查找文本文件中出现的最大字符串
- 11. 在.NET 4.0中计算文件夹文件的最快方法
- 12. 在文件中查找文本模式的多线程方法
- 13. 检查大量文件中是否存在字符串的最快方法
- 14. 存储/检索字典的最快方法 - SQL,文本文件...?
- 15. 将文本文件导入数据库的最快方法
- 16. 最快的文本搜索方法文件
- 17. 阅读大对象文本文件的最快方法
- 18. Java - 读取文本文件的最快方法字符字符
- 19. 在RichTextBox中存储ascii文件的文本的最快方法是什么?
- 20. 在xml文件中查找值的最有效方法?
- 21. 在几个文件中查找/替换的最佳方法?
- 22. C++,检查文件是否存在的最快方法?
- 23. 检查多个文件存在的最快方法
- 24. PhpED:打开文件的最快方法?
- 25. 查找破损DIV的最快方法
- 26. 查找文件中是否存在字符串的最佳方法
- 27. 在文本文件中查找字符串并寻找它们
- 28. 在文本文件中写入大量数据的最快方法Java
- 29. 在Javascript中以空格分隔文本文件的最快方法
- 30. 什么是最快的方式来查找和删除文件?
我怀疑,这是最快的方法 - 其最简单的。如果以最快的方式搜索特定路径,为了读取每一行,将其与搜索到的路径进行比较并在找到匹配后立即中止。其他一切都是开销。除此之外,std :: hash_set通常比std :: set快得多。 – 2009-08-07 11:26:06
是的,我确实推荐了一个哈希集,如果你有一个库,那么尽管标准违规的'std:'前缀某些库使用,但记住它不在C++标准中。按照您的建议,将I/O和CPU工作混合在一起,以一次吞吐的方式读取几个100 KB的数据,实验速度更快(至少在多任务系统上具有良好的FS,磁盘缓存,预读等) - 今天,磁盘I/O比线性读取(100KB <1msec)要多得多,并且混合容易允许上下文切换,导致寻道(因为其他进程将在磁盘上的其他地方寻找)。 – 2009-08-07 16:07:41
我花时间写了一个基准样本。你错了:用80000行读取一个5MB文件在一台好机器上需要大约0.60秒的时间,包括每行读取的strcmp。如果我省略了strcmp,而是建立了一个std :: set,运行时间增加到了0.75s。 – 2009-08-10 11:41:15