作者RiverJackson (JACK)
看板C_and_CPP
标题[问题] 从档案後面开始抓资料
时间Mon Aug 17 15:41:06 2009
请问一下
如果我有一个档案内容如下
test.txt
aa
bb
cc
dd
ee
ff
如果从前面读的话 就fgets 一次读一行 就可以印出类似
aa
bb
cc
dd
ee
ff
但是如果我想从後面开始读呢 得到这样的结果
ff
ee
dd
cc
bb
aa
我有想到用 sprintf(tmp, "%s%s", buf,tmp)
buf 就是每次读出来 从上面 tmp就是最後的结果
不知道这样的作法 是不是一般都是这样做的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.133.11
1F:→ frank99977:先把档案全部读完,之後再做输出,如何? 08/17 15:47
2F:推 ledia:sprintf 中的目标阵列 (第一个引数) 和来源阵列有重叠 08/17 16:08
3F:→ ledia:行为是未定义的 (也就是无法预期会发生什麽事) 08/17 16:09
4F:→ RiverJackson:重叠是指?? 08/17 16:13
5F:→ RiverJackson:请问一楼 全部资料用fread读出来之後 怎麽由後往前读 08/17 16:14
6F:→ netsphere:fseek? 08/17 16:16
7F:→ RiverJackson:fseek 往上find '\n'好像有点复杂 我先测试一下sprin 08/17 16:35
8F:→ james732:我会先通通都读进来 存在一个阵列 从阵列最後一个去印 08/17 16:49
9F:推 frank99977:楼上已经帮你说破了,其实我还有想到stack,不过效率可 08/17 16:56
10F:→ frank99977:能慢一点 08/17 16:57
11F:推 ianfang:能读进来再做的事 别执着於用读档处理 何苦呢 08/17 18:04
12F:→ RiverJackson:感谢 我刚好跟james使用一样的方法 成功:D 08/17 18:16
13F:推 kameng:借问一下 如果我只需要最後一行(ff)又应该怎麽做?用阵列是 08/17 22:54
14F:→ kameng:可以 但如果档案有1000行 那速度不就很慢? 有甚麽可以直接 08/17 22:55
15F:→ kameng:读到最後一行的方法? 08/17 22:55
16F:推 legnaleurc:seek_end 08/18 00:43
17F:→ RiverJackson:fseek(fp,offset,SEEK_END) 08/18 10:07
18F:推 VictorTom:seek_end只是移档案指标到尾端, 还得由後往前找到最後一 08/18 10:22
19F:→ VictorTom:个换行符号才行不是?? 所以小弟也是觉得直接开档读到尾 08/18 10:22
20F:→ VictorTom:在从记录的buffer里取data; 不过要是来个超过2G的档案就 08/18 10:23
21F:→ VictorTom:不知道该怎麽办了Orz 08/18 10:23