快速查找文件中的位置

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)

但是我猜可能会有某种更有效的方法吗?

Kam*_*uri 5

读取整个文件一次,并为文件中的某些数据点创建索引(例如1000点)。索引中的每个条目都可以将文件中的位置映射到从该位置开始的第N个数字。建立该索引后,每次寻找第N个数字时,首先要找到索引中最接近的条目,该条目告诉您文件中最接近的已知点fseek。然后使用fscanf查找值来执行搜索。这以使用一些内存作为索引的代价减少了搜索时间。

索引中的条目可能类似于:(文件偏移量,数字N)

索引看起来像:(文件偏移1,数字1)(文件偏移2,数字2)...(文件偏移N,数字N)