超大文本文件字符串查找

trymain 2015-10-24 12:53:12
一个超大的文本文件(980 MB),里面是一整条数据,我想要在里面查找特定的几十个字符串(长度1-10可变 )
我先string a;定义一个字符串变量,但是读不进去,显示错误,后来使用richTextBox控件
richTextBox1.LoadFile(@"d:\lot\pi-billion.txt", RichTextBoxStreamType.PlainText)
虽然可以装载到richTextBox里面,但是richTextBox不能操作,一执行Text.IndexOf("123")就出错。
请问有没有办法读取,并且查找特定的字符串呢?
...全文
759 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
trymain 2015-10-25
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
这种你肯定得拆分成小文件才行
主要不是自己能控制的文件
trymain 2015-10-25
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
File.Open 只要内存够大就行
正在试MSDN里面的相关代码,谢谢啊
winnowc 2015-10-25
  • 打赏
  • 举报
回复
你这个 pi-billion.txt 是十亿位 π 值吧。刚好前一阵写过个 trie 树搜索,稍微改了改,写了个用内存映射文件 unsafe 方式的搜索(所以要勾上工程的允许unsafe设置),不到一百行,放在 https://code.csdn.net/snippets/1254051。 程序输出找到的索引和字符串。我机器上 10s 左右,这个效率应该凑合能用。你说字符串长度1-10可变,但如果长度太小结果可能相当多,不输出还好,输出的话可能会严重影响效率哦。 关于 trie 树和内存映射文件 #4 和 #3 楼也提到了,在这里前者优化了多个目标的搜索效率,后者优化了大文件磁盘 I/O 效率,它们也能做更多事情,都是很有用的东西,你可以查找相关资料看看。
Poopaye 2015-10-24
  • 打赏
  • 举报
回复
File.Open 只要内存够大就行
nomasp 2015-10-24
  • 打赏
  • 举报
回复
我就不懂你为什么要把数据都写到这一个文本里?不能设置索引放在多个里面么?
xuzuning 2015-10-24
  • 打赏
  • 举报
回复
分块逐次读入 每次读入时要保留上一次读入的最后 待查字符串的长度与新读入的数据合并 观察到你有 要在里面查找特定的几十个字符串 那么可先用这 几十个字符串 构造一颗 trie 树,然后按字符读取一遍文件即可 trie 树是目前最简捷的多关键字匹配算法
ajianchina 2015-10-24
  • 打赏
  • 举报
回复
楼主,我把方法提供给你 读取、检索超大(G级、数十G级)的单个文件,需要用内存映射的方法,需要调用win32 API,虽然逐行检索也可以,但效率低下,内存映射可以仅以很小的资源实现更高的效率。 你可以到网上去找方法,如果找不到,我回头将方法整理好给你。
  • 打赏
  • 举报
回复
这种你肯定得拆分成小文件才行

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧