如何从一个较大文件的指定行 开始读取文件

seventynine 2012-03-16 04:19:14
一个文件2G,里边有一行内容char ss[32] = "abcdeftsfdtgddsdtg";具体在文件的哪个位置并不清楚
读文件的时候要偏移到文件的这一行开始读,然后对之后读出来的每一行内容做操作;
请问如何快速 偏移 定位到该行,并开始继续读后面的内容?
...全文
224 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 seventynine 的回复:]
引用 5 楼 zhao4zhong1 的回复:

fgets
你好,fgets太慢了,好几个G的文件,这什么时候可以扫到我要找的那行?
[/Quote]
要在电脑上实际运行测试程序执行快慢;
不要在人脑中估计程序执行快慢。

操作系统的文件缓存、硬盘上的高速缓存……是用来干什么的?!
nanjingnew4 2012-03-19
  • 打赏
  • 举报
回复
mmap内存映射,strstr找子串。这个方法等下去GOOGLE一下
JoeBlackzqq 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qq120848369 的回复:]

mmap内存映射,strstr找子串。
[/Quote]

我也觉得这种方法是最快的。因为strstr会直接帮你搜索匹配的字符串的!
如果文件过大,可以每次映射一部分,没找到,再往后映射!
qiuhui00 2012-03-16
  • 打赏
  • 举报
回复
不是一次读一行,可以一次读固定字节数,只要字节数定的合适,应该也不会太慢把
seventynine 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qiuhui00 的回复:]

个人觉得,可以先读取一部分(可以大一些)到buffer中,判断ss在不在其中,如果不在,接着往下再读一部分,一直到找到ss的位置,然后就可以开始处理了
[/Quote]你好,这样比较难,而且比较慢···
seventynine 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wanyuan19890515 的回复:]

读成字符串了?就是上面说的buffer。在到字符串里查找?
[/Quote]就是一个字符串,是一个文件的某一行,现在要找到这一行,并从这一行开始读文件
奋斗小青年 2012-03-16
  • 打赏
  • 举报
回复
读成字符串了?就是上面说的buffer。在到字符串里查找?
seventynine 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shyrgst 的回复:]

一行一行的读,读出后,利用strstr找匹配字符串。
之后在对相应的进行修改
[/Quote]你好,这样太慢了···
seventynine 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 querdaizhi 的回复:]

基本上很难...2G = 2*1024M = 2*1024*1024KB = 2*1024*1024*1024 byte

是不是将2g的数据划分为1024个2m的数据。然后2m的数据划分为1024个KB。然后用strcmp()逐行比较?
[/Quote]你好,实际不止 2G,应该有 5G多
seventynine 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]

fgets
[/Quote]你好,fgets太慢了,好几个G的文件,这什么时候可以扫到我要找的那行?
querdaizhi 2012-03-16
  • 打赏
  • 举报
回复
基本上很难...2G = 2*1024M = 2*1024*1024KB = 2*1024*1024*1024 byte

是不是将2g的数据划分为1024个2m的数据。然后2m的数据划分为1024个KB。然后用strcmp()逐行比较?
shyrgst 2012-03-16
  • 打赏
  • 举报
回复
一行一行的读,读出后,利用strstr找匹配字符串。
之后在对相应的进行修改
qq120848369 2012-03-16
  • 打赏
  • 举报
回复
mmap内存映射,strstr找子串。
赵4老师 2012-03-16
  • 打赏
  • 举报
回复
fgets
qixing1115 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gold_water 的回复:]
file open
file seek
file read
类似这样的函数
[/Quote]
不过不知道位置就不好说了,估计要全部读一遍,直到读到你想要的,不知道还没有有其它方法

女旺仔 2012-03-16
  • 打赏
  • 举报
回复
查找问题。2G文件不是特别大。可以找到一个(组)唯一的关键字,然后定位。如何找,那就要用一些简单的算法了,如果那些内容是你自己之前写入的,可以建立检索表,这样效率高。
qiuhui00 2012-03-16
  • 打赏
  • 举报
回复
个人觉得,可以先读取一部分(可以大一些)到buffer中,判断ss在不在其中,如果不在,接着往下再读一部分,一直到找到ss的位置,然后就可以开始处理了
gold_water 2012-03-16
  • 打赏
  • 举报
回复
file open
file seek
file read
类似这样的函数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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