如何合并N个文件

时间:2015-03-12 21:17:55

标签: c file sorting

我有N个文件,每个文件的每一行都有唯一的单词和单词count,例如

file1      file2     file3  
the 2      black 3   red 4 
apple 4    tree 2    crab 6
snake 3    mantle 8  puppet 1

如何将按排序顺序将这些文件合并为一个文件,提前感谢,真的需要一个想法。

void *doMerge(void* arg){
    int i,j,p = 0, k = 0;
    char*min = malloc(sizeof(char)*256);
    FILE *f = fopen("fileFinal","w+");
    char **StringBuffer = (char **)malloc(sizeof(char*)*R);
    int *IntBuffer = malloc(sizeof(int)*R);
    for(i=0; i < R; i++){
        rewind(temp2[i]);
        StringBuffer[i] = (char *)malloc(sizeof(char)*256);
        if(fscanf(temp2[i],"%s %d",StringBuffer[i],&IntBuffer[i]) == 1)
            printf("String is %s and int is %d\n",StringBuffer[i],IntBuffer[i]);
    }

    while(1){
        strcpy(min, StringBuffer[0]);
        for(j=0 ; j < R-1; j++){
            if(strcmp(StringBuffer[j+1],StringBuffer[j]) <= 0){
                strcpy(min,StringBuffer[j+1]);
                p = j+1;
            }
        }fprintf(f,"%s %d\n",min, p);
        if(fscanf(temp2[p],"%s %d",StringBuffer[p],&IntBuffer[p]) == 1){}
        k++;
    }

};

1 个答案:

答案 0 :(得分:0)

while(1)
{
    strcpy(min, StringBuffer[0]);
    for(j=0 ; j < R-1; j++){
        if(strcmp(StringBuffer[j+1],StringBuffer[j]) <= 0)
        {
            strcpy(min,StringBuffer[j+1]);
            p = j+1;
        }
    }
    fprintf(f,"%s %d\n",min, p);
    if(fscanf(temp2[p],"%s %d",StringBuffer[p],&IntBuffer[p]) == 1)
    {}
    k++;
}

while循环有许多不同的问题

1)p需要在0循环之前初始化为for 2)strcmp应该将minStringBuffer[j]进行比较,这也意味着 2a)for循环应为for(j=1;j<R;j++)
2b)strcpy(min,StringBuffer[j+1]);应为strcpy(min,StringBuffer[j]);,和 2c)行p=j+1应为p=j
3)k不用于任何内容,应删除

但最重要的是fscanf。您应该检查fscanf是否返回2。如果没有,则文件完成,您需要跟踪文件已完成的事实,并且不应再在for循环中检查该文件。