c语言处理文件里面的数据

目前我想用c语言做文件中的数据互差(一是文件中数据很大,有很多组数据,每组有10行左右的数据,互差就是每行数据的某个数据与第一行的同样位置的数据做差),最后一步把互差数据导入excel表格,然后用excel表格画出趋势图。
        1.我想问大家,这个可以用c语言做出了吗?
        2.我目前写了这个代码,这个代码的作用就是将38列转化为二维数组的形式,为了后续做互差,互差直接用数组减数组,这个想法也可行吧?
        3.希望大家给我几点建议,让我少走弯路。
        补充:我刚学c语言不久,有不少东西我可能表达的不清楚,大家可以来问,谢谢!
        数据模板是这样
        

img


其中有一组做互差就是22.61与其他行的22.xx(例如第二行是22.63,第三行是22.58)做差,然后得出结果,放入excel表格中。

大家给给意见,我觉得这个好难写!!网上找不到类似的模板。

我目前代码写到这里,不知道下一步该进行哪一步了

img

img

我查了下资料,写入excel表格的一个办法是,先新建一个空白xls的表格文件,然后再另存为csv形式,然后用C语言写入数据进去。下面用你提供的数据样例,我模拟做了20行数据,然后计算其互差18个写入文件名为excelTest.csv的文件,有了表格的数据列,做出趋势图应该是可以了吧,代码如下:
参考链接:
如何在WPS里作趋势图_百度知道
feof(函数名)_百度百科
C 语言入门 08 一行一行读取 txt 文件 - 知乎
fscanf_百度百科
C语言读取写入CSV文件 [二]进阶篇——写入CSV文件 - 知乎
C语言操作EXCEL文件(读写)_大小宝的博客-CSDN博客_c语言读取excel表格

#include <stdio.h>
#define MAX 256
#define NUM 10  //每隔多少计算一次互差 


int main(void){
    
    FILE * tfp = fopen("lplplp.txt","r");
    
    if(tfp==NULL){
        printf("打开文件失败!\n");
        return 0;
    }
    
    char temp[MAX];
    
    //https://baike.baidu.com/item/feof/10942186?fr=aladdin
    //https://zhuanlan.zhihu.com/p/150698454
    //先文件的前三行读走 
    fgets(temp,MAX,tfp);
    fgets(temp,MAX,tfp);
    fgets(temp,MAX,tfp);
    
    
    int id;
    double message;
    double result[NUM-1]; //每一行与第一行第三列的互差存入这个数组 
    double data[NUM]; //存储每一行目标数据列的 数据 
    int i=0; 
    
    FILE * fp = fopen("excelTest.csv","w");
                
    if(fp==NULL){
        printf("打开文件失败!\n");
        return 0;
    }
                
                
    while (feof(tfp)==0){
        
        //读走前三列,包括起始的"<" 这一列 
        fscanf(tfp,"%s",temp);
        fscanf(tfp,"%s",temp);
        fscanf(tfp,"%d",&id);
        
        //读取目标列的数据
        //https://baike.baidu.com/item/fscanf/10942374?fr=aladdin
        int num = fscanf(tfp,"%lf",&data[i]);
        if(num==1){
            printf("message=%f\n",data[i] );
            i++;
            
            if(i==NUM){
            //计算互差
                 for(int j=0;j<NUM-1;j++){
                     result[j] = data[0]-data[j+1];
                     printf("互差为:%f\n",result[j]);
                 }
                     //写入excel文件
                
                
                
                
                //https://zhuanlan.zhihu.com/p/464082154
                //https://blog.csdn.net/hongzhen91/article/details/57422897/
                for(int k=0;k<NUM-1;k++){
                    fprintf(fp,"%f\n",result[k]);
                } 
                
                
                i=0;  //开始读取下面新的一组10行数据 
     
            } 
            
        
            
        }
        
        //读取后面四列的数据 
        fscanf(tfp,"%lf",&message);
        fscanf(tfp,"%lf",&message);
        fscanf(tfp,"%lf",&message);
        fscanf(tfp,"%d\n",&id); 
        
        
        
    } 
    
    fclose(tfp);
    fclose(fp);
    
    

    return 0;
} 

测试数据文件(lplplp.txt):

>CLSWCWEAWCUWCES WSF1 0 0.0 AWWMMMN 0 -0.231 01357900 5 9
< 0000000 0.000 0.000 0 0
< 10
< AAA 010 22.63 9178751.46 2123346.814 -98.310 233000 
< AAA 011 22.61 9156751.50 2123345.861 -98.300 388000 
< AAA 012 22.58 9124751.71 2123346.052 -98.306 388620 
< AAA 013 22.63 9198751.42 2123350.619 -98.302 391000 
< AAA 014 22.58 9138751.48 2123344.910 -98.302 391000 
< AAA 015 22.68 9123351.49 2123345.861 -98.304 298000 
< AAA 010 22.66 9178751.46 2123346.814 -98.310 233000 
< AAA 011 22.52 9156751.50 2123345.861 -98.300 388000 
< AAA 012 22.45 9124751.71 2123346.052 -98.306 388620 
< AAA 013 22.78 9198751.42 2123350.619 -98.302 391000 
< AAA 010 22.52 9178751.52 2123346.814 -98.310 233000 
< AAA 011 22.61 9156751.50 2123345.861 -98.300 388000 
< AAA 012 22.58 9124751.71 2123346.052 -98.306 388620 
< AAA 013 22.63 9198751.42 2123350.619 -98.302 391000 
< AAA 014 22.58 9138751.48 2123344.910 -98.302 391000 
< AAA 015 22.68 9123351.49 2123345.861 -98.304 298000 
< AAA 010 22.66 9178751.46 2123346.814 -98.310 233000 
< AAA 011 22.52 9156751.50 2123345.861 -98.300 388000 
< AAA 012 22.45 9124751.71 2123346.052 -98.306 388620 
< AAA 013 22.78 9198751.42 2123350.619 -98.302 391000 


img

数据处理部分你直接用纯C写数组去操作倒也没什么问题,细心就可以了。但是个人建议用C++写,读写文件也更方便,而且你的需求中有excel的操作,也就是说你至少需要自己实现或者从网上找读写excel的接口。可以尝试用Qt来写,会省很多事。

对于这个问题,你需要完成以下几步:

  1. 按照文件格式正确读取数据。你可以用C/C++直接从原数据文件提取数据,原始数据文件中含有其他字符和数据,你需要在代码里进行过滤处理。当然你也可以先用脚本(比如Shell, Python, Perl)把数据先从原始文件中提取出来按格式存放到新文件,然后你在用C/C++程序从预处理过的数据文件里读取数据。
  2. 数据提取出来后,你就可以计算数据互差。
  3. 将计算结果保持到CSV格式文件。Excel支持导入CSV文件。