我有一个包含数据块的文本文件。块是结构。每个块都有许多记录,在我的例子中每个块有12个记录。我想要做的是对每个块进行排序并将其写入我称为sortedFile
的另一个文件中。这是我的代码,我没有发布整个代码,因为它太多了。
while(counter < numOfBlocks){
fread(buffer, 1, sizeof(block_t), fileOp);
//get the blocks
//buffer->blockid = firstBlock;
for(uint i = 0; i < buffer->nreserved; i++){
for(uint j = i; j < buffer->nreserved; j++){
if(buffer->entries[i].num > buffer->entries[j].num){
smallest = buffer->entries[j].num;
buffer->entries[j].num = buffer->entries[i].num;
buffer->entries[i].num = smallest;
//keep the record id's
uint smallestID = buffer->entries[j].recid;
buffer->entries[j].recid = buffer->entries[i].recid;
buffer->entries[i].recid = smallestID;
fwrite(&buffer, 1, sizeof(block_t), sortedFile);
//fscanf(sortedFile,"Record id: %d, Num: %d", buffer->entries[i].recid, smallest);
}
}
}
counter++;
}
这个while循环正是我想要的。这些块按其buffer->entries[].num
字段排序,然后写入sortedFile
然后我更新计数器,然后再次启动for循环,我觉得for循环正在写入数据来自前一循环的数据。以下是我打印sortedFile
内容的方法。结果我只得到最后一个块的排序值。
//print out contents of sortedFile
int z = 0;
printf("This is the sorted file: \n");
while(z < reserved){
fread(buffer, 1, sizeof(block_t), sortedFile);
printf("Block id: %d, Record id: %d, Num: %d\n", buffer->blockid, buffer->entries[z].recid,
buffer->entries[z].num);
z++;
}
fclose(sortedFile);
如何显示我的程序以显示文件的下一部分以写入新数据?我正在考虑使用fwrite与块的大小的某种指针,每次循环运行时都会更新,但我不是那么经验,我无法正确。