这是我之前提出的问题的后续,在这里的一些人的帮助下,我能够开始使用我想要编写的功能,但我还没有完成它。这是我之前的问题:我有一系列扩展名为 (.msr) 的文件,它们包含十多个参数的测量数值,范围从日期、时间、温度、压力......冒号。数据值的示例如下所示。
2010-03-03 15:55:06; 8.01; 24.9; 14.52; 0.09; 84; 12.47;
2010-03-03 15:55:10; 31.81; 24.9; 14.51; 0.08; 82; 12.40;
2010-03-03 15:55:14; 45.19; 24.9; 14.52; 0.08; 86; 12.32;
2010-03-03 15:55:17; 63.09; 24.9; 14.51; 0.07; 84; 12.24;
每个文件的名称为 REG_2010-03-03,REG_2010-03-04,REG_2010-03-05,...,它们都包含在一个文件中。
- 我想从每个文件中提取日期信息,在这种情况下为 2010-03-03,第 3 列和第 6 列。
- 求第 3 列和第 6 列各列的统计平均值。 3. 然后将结果存储在一个新文件中,该文件只包含日期,以及上述列的计算平均值,以供进一步分析。
我现在的问题是:我希望能够打开包含 30 个扩展名为 .msr 的文件的目录。我想打开源文件,然后对于其中的每个文件,提取我之前解释过的所需信息,并为上面读取的每个文件存储日期(每个文件中的统一)和第 3 列和第 6 列的平均值在单个文件中。因此,目标文件将在每行包含三列,分别是日期、平均值(第 3 列)和平均值(第 6 列),由空格分隔,总共 30 行。下面是我开始使用的代码,希望您能提供有关如何实现它的指南。
就像你上面概述的那样。这是我想要实现的目标的大纲
1)打开包含文件的目录(这里是USB KEY)。2) 读取其中的所有 msr 文件名。3) 打开每个 msr 文件。4)提取日期(文件中的第一列),忽略时间和分隔符(5)提取数据1(第3列数据)6)提取数据2(第6列数据)7)计算第 3 列和第 6 列的平均值。8)输出到文件(日期,平均第 3 列,平均第 6 列) 9)关闭 msr 文件 10)关闭目录(如果可能)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int file_getline_analyse(char *infile,char *outfile,char *path,char *strline) {
int return_value=0;
FILE *fd=NULL; // pointer for data source
FILE *fo= NULL; // Destination file
char *file_path=NULL;
char *date, *tmp,*time;
double sum, mean = 0;
file_path=calloc((strlen(path)+strlen(infile)),sizeof(file_path));
if (file_path==NULL) {
printf("file_path in get_line\n");
exit(EXIT_FAILURE);
}
strcpy(file_path,path); // copies the path entered in the function call to the allocated meomory
strcat(file_path,infile); // concatenates the contents of the allocated meomory from the source file
fd=fopen(file_path,"r");
fo = fopen(outfile, "w");
if((fd==NULL) && (fo==NULL)) {
return_value = -1;
}
else {
int i=0;
int j=0;
while ((fgets (strline, BUFSIZ, fd))>0){
date = strtok(strline, " ");
time=strtok(NULL, " "); // skip over time
tmp = strtok(NULL, ";");
if (i == 3|| i == 6) { // get only the 3rd and 6th value
sum += strtod(tmp, NULL);
++i;
if(j== '\n') {
// Replacing the characters at the end of the line by 0:
char *p = strchr (strline, '\n');
if (p) {
*p = 0;
}
return_value = 0;
break;
}
j++;
}
mean = sum/(double)(j+1);
fprintf(fo,"%s: %.2f\n", date, mean);
}
fclose (fd);
fclose(fo);
}
free(file_path);
file_path=NULL;
return return_value;
}