我有一个包含2^32
键/值对的文件;
32410806935257552 7355088504912337885
32422108164434515 8864339902215816897
32476145725020530 3183682744179377405
32554129507725755 7487866067392975840
32556703862039701 6580190515895793022
32576110112978588 468697310917255961
32589559935917707 757063057981860288
32724197203660231 4397507527199428746
32740607750878547 497049298362389181
32804063187658851 690408619066859126
....
我需要阅读该文件,并在每次需要时获取1000 lines
。
我正在使用以下功能;
void setChunk(pair* pairs, int setNumber, FILE *file){
int start = setNumber * 1000;
int finish = start + 1000;
int count = 0;
int i = 0;
char line [c];
char *search = " ";
printf("chunk is set between %d and %d\n", start, finish);
if ( file != NULL ){
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
if (count >= start && count < finish)
{
pairs[i].key = strdup(strtok(line, search));
pairs[i].value = strdup(strtok(NULL, search));
i++;
}
count++;
}
}
}
我正在使用first 1000 thousands key/value
对,并且毫无问题地写入struct array (pairs)
。然后我尝试获得下一个数千对但是,键/值结构数组保持不变。我无法更新其内容。这可能是什么原因?
注意:setNumber
定义我将采取哪一千对。如果是0
,我会得到0-1000
之间的行,如果是18
,我会得到行18000-19000
。
我在这样的循环中调用setChunk函数;
for(j=0; j<=fileNumber; j++){
if ( file[j] != NULL )
{
printf("%d. chunks is started to fill\n", j);
pairs[j] = malloc(1000 * sizeof(pair));
setChunk(pairs[j],setnumber[j],file[j]);
setnumber[j]+=1;
}
}
答案 0 :(得分:1)
关于以下几行:
setChunk(pairs[j],setnumber[j],file[j]);
setnumber[j]+=1;`
setnumber
是一个数组,
(假设它被初始化为全0。)
因此,第一次调用时会传入entry setnumber [0]。然后setnumber [0]增加到1
在下一个呼叫中,setnumber [1]在呼叫上传递,然后setnumber [1]增加到1.
即。在每次调用时,第二个参数始终为0.