1.我想问大家,这个可以用c语言做出了吗?
2.我目前写了这个代码,这个代码的作用就是将3行8列转化为二维数组的形式,为了后续做互差,互差直接用数组减数组,这个想法也可行吧?
3.希望大家给我几点建议,让我少走弯路。
补充:我刚学c语言不久,有不少东西我可能表达的不清楚,大家可以来问,谢谢!
数据模板是这样
大家给给意见,我觉得这个好难写!!网上找不到类似的模板。
我目前代码写到这里,不知道下一步该进行哪一步了
我查了下资料,写入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
数据处理部分你直接用纯C写数组去操作倒也没什么问题,细心就可以了。但是个人建议用C++写,读写文件也更方便,而且你的需求中有excel的操作,也就是说你至少需要自己实现或者从网上找读写excel的接口。可以尝试用Qt来写,会省很多事。
对于这个问题,你需要完成以下几步: