[问题] 文字读档 从尾巴开始一行一行读

楼主: kai5566 (改名Dirk_AI56)   2016-03-30 20:58:03
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
win7 C::B
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
喂入的资料(Input):文字档
一般的文字档 每一行都不同大小
现在想要从文字档最后一行
开始一行一行读到第一行
从第一行读很简单 while(NULL!=fgets...)
但要从最后一行读到第一行,目前只想的到存在阵列
请问有人有更好的方法吗?
三四千行 不太想开那么大的阵列
而且也不是每次都固定行数...
求救!!!
作者: Schottky (顺风相送)   2016-03-30 21:06:00
用 fseek 把指标移到档案尾巴,再自己 implement 一个逆向读取的 fgets() 吧...或是先用指令 tac (cat 的相反) 把档案翻转过来再读这类工具都有 compile 成 Windows 可以用的 .exe binary到这边下载就可以了: http://goo.gl/eV5Ave
作者: stupid0319 (征女友)   2016-03-30 22:37:00
存进数据库,设index,然后SQL指令从最后面拿出来
作者: Schottky (顺风相送)   2016-03-30 22:44:00
顺带一提,你可以参考 tac 的原始码是怎么写的 XD我爱死了 open source 软件呃... 你有听过 pipe 吗?tac inputfile > outputfiletac inputfile | yourprogram后者直接把 tac 的输出送到你的程式的 stdin
作者: Neisseria (Neisseria)   2016-03-30 23:15:00
用 babun 吧,有许多 Unix 工具,而且调教得不错文字档刚好是 Unix-like 系统的强项
作者: VSei (Chaos)   2016-03-31 09:10:00
开一个大的二维vector,*it 跳到最后一行再用*--it?vector可以扩展缩减,空的时候就跳过。
作者: Schottky (顺风相送)   2016-03-31 17:12:00
我怕他说的文字档有 200GB ...
作者: HolyBugTw (HolyBug)   2016-04-01 12:07:00
fseek(SEEK_END),ftell取位址,读一个character然后后退,判断seek位置与换行符号,整行逆输出

Links booklink

Contact Us: admin [ a t ] ucptt.com