免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3225 | 回复: 6
打印 上一主题 下一主题

文件一部分读取问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-13 19:02 |只看该作者 |倒序浏览
请大家帮忙
我有一个文件约15M大概几万行, 如何快速定位到第1000行(或其它行), 然后再读入一部分? 在需要的时候, 再读入
某一行开始的一部分

论坛徽章:
0
2 [报告]
发表于 2007-09-13 19:13 |只看该作者
每行有规律不?比如说每行的字符数都是相同

论坛徽章:
0
3 [报告]
发表于 2007-09-13 19:29 |只看该作者
原帖由 cugb_cat 于 2007-9-13 19:13 发表
每行有规律不?比如说每行的字符数都是相同

我记录了要读入的起始行如, 1, 300, 500, 我把文件中从记录的行开始,到某个结束的标志读入产生一个类对象。 但是我不能一次性把文件都读入, 不然实在太慢,
我想在我需要某一行开始的记录的时候, 就把它读入, 其它都略过。
如文件:
@<AAAA>
.aaa
...
@<ZZZZ>
...
...
...
@<AAAA>(line 1000)
..
..
@<ZZZZ>(tag for end)

论坛徽章:
0
4 [报告]
发表于 2007-09-13 19:47 |只看该作者
提个建议, 是否可以写一个初始化函数, 然后给定一个数据结构, 以500行为一个单位,
并定义一个数据结构里面有两个域, 一个域记录行数, 另一个域记录该行的偏移量,
即在数据结构中记录第0, 500, 1000, 1500 行的行首的偏移量, 你几万行的话, 大概需要100个, 以后每一次读取的话, 先使用fseek跳到临近的那个500的整行的位置, 再往后面进行读. 这样平均下来就只需要读取250行了.

论坛徽章:
0
5 [报告]
发表于 2007-09-13 19:55 |只看该作者
建议用管道,多通道并行处理,其实并不复杂

论坛徽章:
0
6 [报告]
发表于 2007-09-13 20:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2007-09-13 20:26 |只看该作者
谢谢大家,我查了好几本书都没有写这个问题。当初是在learning python中看到这个略行功能。最后the c++ standard library中提到
file.ignore(numeric_limits<std::streamsize>::max(), '\n').  暂时这样先。 但是没法重新定位。 以后用fseek看看。或许能快点。

[ 本帖最后由 hadesgnu 于 2007-9-13 20:30 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP