[讨论] 关于读入档案做后续处理

楼主: jacky1989   2016-10-05 01:28:54
最近在写程式时遇到一个疑问,想提出来大家讨论看看,看怎样做比较好
我有一个文字档,里面大概有20几万行的资料
内容大概是这样,某一个item,后面有一组数值
a 5
b 6
c 79
...
那我今天要对这个文字档做搜寻的动作,而搜寻的关键字大概有7-8个
我以结构的方式储存这些关键字与其相关的值
这时候我考量到一个问题,因为文字档有20几万行,那要搜寻7-8次
1.会直接用while-loop方式,从头搜寻到尾,然后以fseek的方式,将档案指标指回
档案起始位置
2.会搜寻完一次先fclose,然后再fopen一次
3.将档案内容先全部读进来内存,并且以资料串结方式储存
我这人是用3,因为以我的认知,档案读写虽然有经过缓冲区,但是还是必须对硬盘存取
那搜寻7-8次,就得存取超多超多次
如果我只对档案存取一次,接着就是对内存做读写,是否会比较快一点呢??
这次叙述说真的,不是很清楚,我承认我不太会表达我想表达的
所以如果有需要补充的,请告诉我
感谢
作者: Schottky (顺风相送)   2016-10-05 01:31:00
也不需要读 8 次档,也用不着全部读进来储存一次读一行,用 8 个关键字都搜过,再读下一行就好这样缓冲区的效果也很好,你写起程式也很方便回到你问的问题,当然整个档案读进内存再料理比较快反正输入档也很小,20 万行大概 20MB 而已,OK 的如果输入档有 4GB 那就会开始遇到一些额外的麻烦事了
作者: CaptainH (Cannon)   2016-10-05 11:45:00
可以先sort再binary search
作者: james732 (好人超)   2016-10-05 11:53:00
如果关键字有唯一性的话我会想建字典
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-10-05 13:57:00
shell grep 喔耶
作者: longlongint (华哥尔)   2016-10-05 20:08:00
grep 或 写个 inverse index table不过还是推个1楼 现阶段最实用

Links booklink

Contact Us: admin [ a t ] ucptt.com