社区
C++ 语言
帖子详情
如何读取文本文件的最后100行?
anvizh
2008-06-21 11:29:10
我想读取文件的最后100行,有什么好方法呢?文件可能会比较大,从头开始读就不现实了。
有没有方法可以从后面往前读,每次读一行呢?
...全文
1244
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...
[windows][工具]使用 PowerShell 获取大
文本文件
的
最后
100
行
使用 PowerShell 获取 MongoDB 日志文件的
最后
100
行
。
C语言:每
行
字符数量不确定时,怎样按
行
读取
文本文件
我当然知道简单的按
行
读取
文本文件
的博客在csdn上俯拾皆是,无非用fgets,fscanf,或者fread,但是这都是在我们已经知道或者能够大概估计每
行
所含字符数上限的情况下的做法,如果我们不清楚且无法估计每
行
有多少个字符那我们该怎么做呢?? 文章目录1.思路2.代码3.程序运
行
效果4.结束语 1.思路 1.很多按
行
读取
的博客都使用 char * fgets(char *__restrict__ ...
C语言中的fscanf
读取
文本文件
一
行
而不能
读取
行
中数据的解决方法
在学习c语言的时候,我们可能会对fscanf的
读取
存在疑惑,这也是c语言的一个bug。在"E:\\temp\\a.txt"的a.txt的内容如下:张三,600李四,500王五,1200程序要解决的问题是:
读取
姓名后面的数字,并求和;程序的代码如下:#include <stdio.h>#include <stdlib.h>#pragma warning (disable:49...
Java
读取
文件
最后
N
行
Java
读取
文件
最后
N
行
1、首先在pom文件导入依赖 <!--在Java中,我们可以使用 Apache Commons IO 的 ReversedLinesFileReader 类
读取
文件的
最后
几
行
。 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId>
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章