调整fseek的读数

时间:2014-05-29 14:38:37

标签: c scanf fseek

我无法从以下文本文件中获取正确的数字。我只能从文件的早期行获取。我使用 fseek 功能,但它没有工作。我想能够得到1024位的数字。我的文件依次有32个浮点数。

#DEFINE N 1026 //The number that I want read
#DEFINE SIZEFLOAT 9 //-1.849728 Nine digits
float data
fseek(arq, (((N-1) * SIZEFLOAT) + ( N / 31.0 ) ) * sizeof(char), SEEK_SET);
fscanf(arq, "%f", &data);

以下是我的数据文件的外观:

-1.849728+3.491089+2.169375-5.024082-4.683389-1.621853-3.976242+4.346661-2.634182-0.647340-4.725379+4.996003+0.965050+1.515107-4.365746+4.977995-2.800827+1.541677-1.292648-1.701067-0.883889-0.081253+3.928178+2.617783-2.590111+2.277843+0.856840+1.676386-4.604098-1.937928-2.174185-1.333826
-3.566839+5.115190-1.237908-3.130227-1.626663-0.094150-3.903567+0.859154+4.378510-3.508946+0.735157+0.223560+3.126161+1.489411+0.081555-4.794665-2.088912+3.908907-1.375732+2.147199-1.292346-2.567554-0.355018+1.237543+4.830288-4.618177-2.206071-4.893809-1.436105+0.739744-1.107636+0.117056
... More rows of data similar to the above...

可以找到完整的文件here

1 个答案:

答案 0 :(得分:1)

  

我的文件依次有32个浮点数。

更具体地说,您的文本文件包含32个浮点数的行,格式为文本到9个位置;每一行最后都有一个行尾字符。

掌握了这些信息,您可以先计算k - th数的偏移量,先将其除以32以获得该行,然后将行数乘以单行的大小,然后添加当前行中的偏移量,如下所示:

#define NUM_SIZE 9
#define ROW_NUM_COUNT 32
#define ROW_SIZE (ROW_NUM_COUNT*NUM_SIZE+1)
...
int k = 123; // The index of the number that you need to read
int offset = ROW_SIZE(k / ROW_NUM_COUNT) * ROW_SIZE + NUM_SIZE * (k % ROW_NUM_COUNT);
...
float data;
fseek(arq, offset);
fscanf(arq, "%f", &data);