社区
C++ 语言
帖子详情
如何读取文本文件的最后100行?
anvizh
2008-06-21 11:29:10
我想读取文件的最后100行,有什么好方法呢?文件可能会比较大,从头开始读就不现实了。
有没有方法可以从后面往前读,每次读一行呢?
...全文
1176
20
打赏
收藏
如何读取文本文件的最后100行?
我想读取文件的最后100行,有什么好方法呢?文件可能会比较大,从头开始读就不现实了。 有没有方法可以从后面往前读,每次读一行呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
czx605
2008-06-22
打赏
举报
回复
int fseek(FILE *fp,long d,int pos)
fp是文件指针,d是位移量, pos是起始点。
Pos的取值为:
0 :文件开始处
1 :文件的当前位置
2 :文件的尾部
lin_style
2008-06-22
打赏
举报
回复
从后往前。批量读到缓冲进行判断
计算\n结束符
对缓冲大小控制得好,速度还是很快的。
csdn5211
2008-06-22
打赏
举报
回复
连五星都出动了?这个要处理的文件是你自己可以控制内容的吗?如果是,最好一开始就加上索引。否则只好一点点往后读了。
grellen
2008-06-22
打赏
举报
回复
up .
K行天下
2008-06-22
打赏
举报
回复
[Quote=引用 9 楼 k2eats 的回复:]
先计算有多少行
然后读取最后十行
[/Quote]
哦!最后一百行
先计算有多少行 ,
然后跳过前面的 '\n', 直到最后读取一百行
K行天下
2008-06-22
打赏
举报
回复
先计算有多少行
然后读取最后十行
dongxyang
2008-06-22
打赏
举报
回复
可以看看Unix中的tail命令是怎么写的
jixingzhong
2008-06-22
打赏
举报
回复
tail -n 100 //这是unix命令,如果楼主你的环境是确定为unix系统,倒是可以这么偷懒···
jixingzhong
2008-06-22
打赏
举报
回复
由于是要读取末尾的 100行,而不是 末尾的 100字符,
所以暂时没啥特殊的办法,
getline读取行吧,缓冲最新getline获得的10条数据即可
mhyx_2008
2008-06-22
打赏
举报
回复
肯定要用fseek();
每读一个字符向开头的方向移2位,直到定位盗100个‘\n’的位置处,然后再用fgets()读
clhposs
2008-06-22
打赏
举报
回复
最简单的方法 (*^__^*) 嘻嘻……
首先全部读取到vector
然后向后循环100次 不就100行
fallening
2008-06-22
打赏
举报
回复
[Quote=引用 1 楼 iambic 的回复:]
tail -n 100
[/Quote]
yeah
czx605
2008-06-22
打赏
举报
回复
用fseek定位idao末尾
定义一个栈
从末尾开始移动指针并把值入栈,碰到‘\n’
就计数直到计数到10,然后出栈
lin_style
2008-06-22
打赏
举报
回复
[Quote=引用 14 楼 anvizh 的回复:]
肯定要用fseek();
每读一个字符向开头的方向移2位,直到定位盗100个‘\n’的位置处,然后再用fgets()读
=============================
我用的就是这种方法。
我要用C++或tcl实现,并且要在Unix和Windows上用。。。
这个处理要求实时性比较高,无论用什么缓冲,只要从文件头开始读都应该不可行,文件大的话,耗时。
多谢了!!!
[/Quote]
你能大概计算出每行的大小吗?
能计算出的话,
假设每行大小是m(这个值要大于标准值若干)
文件大小是S
假设当前行数是 nline=m/S
先移动到 fseek->S-(100*nline)
再从S-(100*nline)这个点到末尾把内容都读出来
因为一开始的m是大于标准值若干,所以这时候读出来的内容是略大于100行的大小,
接着对这个内容进行处理
消耗的复杂度为
nline=m/S 常数
fseek->S-(100*nline) 系统处理,估计也是常数,可以直接移动
再从S-(100*nline)这个点到末尾把内容都读出来 一个拷贝的过程,读出来的内容是略大于100行的大小
接着对读出的内容处理,消耗也不会大,因为这个时候大小是接近100行的大小
蓝翔技校码农
2008-06-22
打赏
举报
回复
先计算有多少行,然后使用指针定位读取。
visame
2008-06-22
打赏
举报
回复
fseek可以吗?
我认为只能从头开始读,一条条替换,直到最后100条
想想外排序的方法。
anvizh
2008-06-22
打赏
举报
回复
肯定要用fseek();
每读一个字符向开头的方向移2位,直到定位盗100个‘\n’的位置处,然后再用fgets()读
=============================
我用的就是这种方法。
我要用C++或tcl实现,并且要在Unix和Windows上用。。。
这个处理要求实时性比较高,无论用什么缓冲,只要从文件头开始读都应该不可行,文件大的话,耗时。
多谢了!!!
wuyu637
2008-06-22
打赏
举报
回复
tail 不是c++的东西,是linux的一个小工具,看楼主的意思应该是要在c++读取文件中的最后几行,
比较好的方法就是 fseek()
herman~~
2008-06-22
打赏
举报
回复
呵呵,是用WINAPI读吗?还是linux?
没明白
iambic
2008-06-21
打赏
举报
回复
tail -n 100
[难题1]怎么
读取
txt文本的
最后
100
行
?
Q/T/A:Question/Thinks/Answer Q:C++中,怎么
读取
txt文本的
最后
100
行
,并将其封装成函数?大家有啥好的想法没? T: t1:最常用的办法就是轮询替换,定义一个
100
大小的buffer,从第0
行
一直读到
最后
一
行
,然后依次替换。
最后
剩下的就是
最后
100
行
的数据。 A: A1)答案代码1 std::fstream decrFileSt...
C语言按
行
读取
文本文件
C语言按
行
读取
文本文件
一般来说,计算机文件可以分为两类:
文本文件
和二进制文件。
文本文件
是一种由若干
行
字符构成的计算机文件。
文本文件
存在于计算机文件系统中。通常,通过在
文本文件
最后
一
行
后放置文件结束标志来指明文件的结束。
文本文件
具有可读性,一般我们用的txt文件,log文件都是
文本文件
,其由字符构成,故我们就按字符处理,按
行
读取
(linux下由’\n’字符换
行
,wondows下由’\r’’\n’组合一起换
行
)。 C标准库函数 函数声明 FILE *fopen(const char *path, cons
JAVA——
读取
文本文件
内容(
行
)
JAVA——
读取
文本文件
内容(
行
) 1.目的 对
文本文件
按
行
进
行
读取
,每
读取
一
行
后显示此
行
,
最后
显示总的
行
数。 2.方法 以
行
为单位
读取
文件,常用于读面向
行
的格式化文件。 ReadFileByLines()方法中,声明缓存流BufferedReader,可以提高字符流处理的效率和速度,使用readLine()方法可以一
行
一
行
地
读取
文本,当遇到null时
读取
文件结束。 3.代码 所...
LabVIEW快速
读取
文本
最后
一
行
的方法
在LabVIEW编程过程中,经常需要
读取
txt、asc甚至csv等格式的
文本文件
来输入自己想要的信息。当
文本文件
比较小时,可能注意不到
读取
文本所消耗的时间,但是当
文本文件
高达几万
行
、几十万
行
时,
读取
文本的耗时很显然会影响程序运
行
体验。面对高达几MB、几十MB甚至上百MB的txt文件,本文介绍可以快速
读取
文本中
最后
一
行
数据的方法。相比于传统方法,可以大幅缩短
读取
最后
一
行
的时间。
C++
读取
文本文件
的
最后
一
行
,倒数第N
行
,倒数后N
行
,以及根据指定字符串在
文本文件
里逐
行
匹配并
读取
该
行
数据
我们知道文件的从头到尾按
行
读取
是非常方便的。但是,有的时候我们只需要文件的
最后
一
行
数据来进
行
分析处理。最近因项目需要,所以我找了许多关于文件
读取
的相关资料尤其是针对于获取文件的
最后
一
行
或者后N
行
。把我最近的成果分享给大家。可以拿来直接用,也可以用来参考学习。也欢迎大家一起讨论。。。 C++直接获取
文本文件
的
最后
一
行
#include <fstream> #include <...
C++ 语言
64,281
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章