goo*_*ofy 0 c c++ file scanf fseek
我有一个带有大量数字的文件,每个数字都用空格分隔。
如:124 1212 5 654 74231 ...
如何快速找到此文件中的第N个号码?
我认为fseek()可能不起作用,因为它是按字节测量的,我可以通过以下方式获得第N个数字:
int i;
for (i=0;i!=N-1;++i) fscanf(somefile,"%d",&variable);
Run Code Online (Sandbox Code Playgroud)
但是我猜可能会有某种更有效的方法吗?
读取整个文件一次,并为文件中的某些数据点创建索引(例如1000点)。索引中的每个条目都可以将文件中的位置映射到从该位置开始的第N个数字。建立该索引后,每次寻找第N个数字时,首先要找到索引中最接近的条目,该条目告诉您文件中最接近的已知点fseek。然后使用fscanf查找值来执行搜索。这以使用一些内存作为索引的代价减少了搜索时间。
索引中的条目可能类似于:(文件偏移量,数字N)
索引看起来像:(文件偏移1,数字1)(文件偏移2,数字2)...(文件偏移N,数字N)
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |