Это продолжение вопроса, который я задавал ранее, и с помощью некоторых здесь присутствующих я смог запустить функцию, которую хочу написать, но я еще не завершил ее.Вот мой предыдущий вопрос: у меня есть ряд файлов с расширением (.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;
}