现在有一个6G大小的纯文本文件,有什么好办法读取后面的指定行的内容?

山的那边还是山~ 2009-05-22 11:09:34
如题所示。
我试图读取文件总行数,即使是这样的话,都会卡在那里不动。
...全文
269 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢各位!在网上找到了软件,把它给分开了.每个分30来M.
jackyjkchen 2009-05-22
  • 打赏
  • 举报
回复
有没有用64位偏移量?6G的数据得64为才能搞定
老邓 2009-05-22
  • 打赏
  • 举报
回复
如果这么大的数据,还没有索引的话,那就只能遍历了
lin12345 2009-05-22
  • 打赏
  • 举报
回复
好夸张的大小...
也只能遍历了吧
  • 打赏
  • 举报
回复
并且每行数据格式不固定。

前面打错字了。
  • 打赏
  • 举报
回复
如果文件没有预先处理,并且没有每行数据格式不固定。
那就只能遍历文件内容,偏移文件指针来实现。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ltc_mouse 的回复:]
试试后台线程读取分析?读取总函数,其实需要把整个文件按行遍历了一次吧?
如果可能,考虑加个索引文件,记录每一行在文件中的偏移,对以后的读取会快一些的吧~
[/Quote]
正如你所说,其实就是按行把文件遍历了一遍。
hjjdebug 2009-05-22
  • 打赏
  • 举报
回复
索引文件告诉你应该seek到什么地方,在合适的地方建立索引就可以了吧!?
hofstede 2009-05-22
  • 打赏
  • 举报
回复
有难度,学习
ltc_mouse 2009-05-22
  • 打赏
  • 举报
回复
试试后台线程读取分析?读取总函数,其实需要把整个文件按行遍历了一次吧?
如果可能,考虑加个索引文件,记录每一行在文件中的偏移,对以后的读取会快一些的吧~
datacode 2009-05-22
  • 打赏
  • 举报
回复
lseek64
redleaves 2009-05-22
  • 打赏
  • 举报
回复
数据量到这种程度,一般都会设计更方便的结构,至少是要加个索引...
非要从原始的文本里得到行数,那你就只能等待...
Sou2012 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lyghe 的回复:]
对于一个执著的不愿建立索引的文件,可以换一个思路:估算位置。

假设前提:
1. 一个若干G的文件,在大多数应用情况下,对行的定位并不是一定要非常精确。
2. 一般来说,文件的每行长度的差别不会太离谱。

在这2个前提下,就可以随机抽取文件中的某些部分,统计其中的换行符的数量,从而估算出每行的平均长度,然后就可以定位到某一行的估算的位置。


具体的算法就不说了,地球人都知道。

据我观察,UltraE…
[/Quote]

UP
lyghe 2009-05-22
  • 打赏
  • 举报
回复
PS:随着对文件内容的不断访问使用,获得信息越来越多,就可以逐渐用逼近的方法对估算出来的位置进行修正。
lyghe 2009-05-22
  • 打赏
  • 举报
回复
对于一个执著的不愿建立索引的文件,可以换一个思路:估算位置

假设前提:
1. 一个若干G的文件,在大多数应用情况下,对行的定位并不是一定要非常精确。
2. 一般来说,文件的每行长度的差别不会太离谱。

在这2个前提下,就可以随机抽取文件中的某些部分,统计其中的换行符的数量,从而估算出每行的平均长度,然后就可以定位到某一行的估算的位置。


具体的算法就不说了,地球人都知道。

据我观察,UltraEdit就是这样干的。
AbnormalSubmarine 2009-05-22
  • 打赏
  • 举报
回复
如果这个文件,每次的数据都要变化的话
那么只能遍历

如果数据固定的话,就在第一遍历的时候建立文件索引,方便以后的访问。

希望看到好的方法
SoRoMan 2009-05-22
  • 打赏
  • 举报
回复
或者试试内存映射,减少文件I/O时间
SoRoMan 2009-05-22
  • 打赏
  • 举报
回复
试试分小块读取,减少内存消耗。
junsofter 2009-05-22
  • 打赏
  • 举报
回复
遍历读取,每遍历一行记录一个偏移,这个偏移一定要用64位整型(long long)。
appleshao 2009-05-22
  • 打赏
  • 举报
回复
搜索6GB 应该不卡吧,搜索过32KB,2GB内存地址空间的飘过.
加载更多回复(1)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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