c - 如何在 C 中对不同文件的列求和?

标签 c file sum multiple-columns

我有 8 个文件(文件%d-%d.dat),每个文件有 2 列和 1000 行:

 File1-1     File1-2    File1-3     File1-4
 x1a y1a     x1b y1b    x1c y1c     x1d y1d 
 x2a y2a     x2b y2b    x2c y2c     x2d y2d
 x3a y3a     x3b y3b    x3c y3c     x3d y3d
 .           .          .           .
 .           .          .           .


 File2-1     File2-2    File2-3     File2-4   
 x1e y1e     x1f y1f    x1g y1g     x1h y1h 
 x2e y2e     x2f y2f    x2g y2g     x2h y2h
 x3e y3e     x3f y3f    x3g y3g     x3h y3h
 .           .          .           .
 .           .          .           .

我想逐行对每个文件File%d-1的第二列求和,并将求和结果写入一个新文件:Filesum1;文件%d-2 等也是如此,即

Filesum1                           Filesum2                and so on  ..
x1a+x1e     y1a+y1e                 x1b+x1f   y1b+y1f           .
x2a+x3e     y2a+y2e                 x2b+x2f   y2b+y2f           .
.           .                       .         .
.           .                       .         .                 . 

我创建了 4 个新文件:

#include <stdio.h>
int main(void)  
{          
int numfiles=4;
int numfileread=8;
int i,yy1, yy2, x0, x1;

FILE *files[numfiles];
FILE *f[numfileread];

for (int n = 0; n < 4; n++)
{
    char filename[4];
    sprintf(filename, "filesum%d.dat", n);
    files[n] = fopen(filename, "w");
}

然后我尝试了这个,但它不能正常工作:

for (int n = 0; n < 4; n++)
{
   yy1=0;
   yy2=0;
   for(int r=1;r<4;r++)
   {
       char file[8];
       sprintf(file, "file%d-%d.dat", r, n);
       f[i] = fopen(file, "r");
       fscanf(f," %d  %d",&x0,&x1);
       yy1+=x0;
       yy2+=x1;
       fclose(f);
       i++;
   }
   fprintf(files,"%d %d\n",yy1, yy2);
   fclose(files);
}

如果我有相同的作业,但要读取 50 个文件:

readFile1, readFile2, readFile3, ......., readFile50

如何更改代码?

最佳答案

有多个问题:

  1. 这个循环只会运行 3 次,我认为您打算让它运行 4 次。

    for(int r=1;r<4;r++)

  2. 字符数组file没有足够的空间来容纳字符串“file%d-%d.dat”

  3. fclose(f); 需要更改为 fclose(f[i]);

  4. 您需要为文件指定索引。

    fprintf(files,"%d %d\n",yy1, yy2);

这就是我想出来的。你可以尝试一下。

#include <stdio.h>

int main(){
        FILE *readFile1;
        FILE *readFile2;
        FILE *writeFile;
        char inFile1[32] = {0};
        char inFile2[32] = {0};
        char sumFile[32] = {0};
        int i,xa,xb,ya,yb;
        int ret1;ret2;
        for(i=0;i<4;i++){
                sprintf(inFile1, "File1-%d", i); 
                sprintf(inFile2, "File2-%d", i); 
                sprintf(sumFile, "sumFile%d", i); 
                readFile1 = fopen(inFile1, "r");
                readFile2 = fopen(inFile2, "r");
                writeFile = fopen(sumFile, "w");
                while(1){
                        ret1 = fscanf(readFile1, "%d %d", &xa, &ya);
                        ret2 = fscanf(readFile2, "%d %d", &xb, &yb);
                        if( (ret1 != 2) || (ret2 != 2) )
                                break;
                        fprintf(writeFile, "%d %d", xa+xb, ya+yb);
                }   
                fclose(readFile1);
                fclose(readFile2);
                fclose(writeFile);
        }   
        return 1;
}

关于c - 如何在 C 中对不同文件的列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763423/

相关文章:

c - Matlab 中的客户端如何将二进制数据发送到 C 中的服务器?

C: 应用宏,不编译

javascript - 在javascript中将文件内容读入字符串的最基本方法

r - 使向量的所有元素都不同

python - 两个 Pandas 数据帧之间的多个条件总和

c - 使用 snprintf 出现段错误

c - 信号,软件中断和硬件中断之间的区别?

C++从文本文件中读取并分离成 vector

android - 检查 android raw 文件的 uri

mysql - 将列与条件相加并显示在行中