Есть 600 файлов в папке. Имена файлов идут 5-значными цифрами по возрастанию, но не порядок возрастания каждый раз разный (U20403,U20415 т.д.). В каждом файле находится 13 столбцов, из которых смысл имеют 4-год, месяц, день, температура. Надо в цикле просмотреть каждый файл, и вывести в другую папку с файлом список среднегодовых температур(т.е. средние температуры файла U20403 занести в файл U20403_results). Код, который я написал, позволяет это сделать, если вводитть имя файла в ручную.
| Код | #include <stdio.h> #include <stdlib.h> #include <iostream> typedef struct { int year; int month; int day; int param4; int param5; int param6; int t; int param8; int param9; int param10; int param11; int param12; int param13; }FILE_DATA; int l=1; int sum=1; int k=1; double arifmet=0; double arifmet2=0; int current_sum=0; int current_year=0; int main() { // int i;//Счётчик int n = 0;//Будет содержать число ситанных строк FILE_DATA * pList = NULL;//Указатель на массив структур FILE_DATA FILE * file = fopen("U21611","rb");//Инициализируем поток чтения FILE * file2 = fopen("U21611_results","w"); FILE * file3 = fopen("Srednee_Zna4enie_temperatur","a+");
if(file == NULL) printf("Error open input.txt\n"); else { //Выделяем память под первую структуру массива pList = (FILE_DATA *)malloc(sizeof(FILE_DATA)); for(n = 0; !feof(file); ) { //Мало кто знает но fscanf возвращает //число считанных параметров if (13 == //Как раз проверяем все ли 13 параметров считали fscanf
( file, "%d %d %d %d %d %d %d %d %d %d %d %d %d\n", &pList[n].year, &pList[n].month, &pList[n].day, &pList[n].param4, &pList[n].param5, &pList[n].param6, &pList[n].t, &pList[n].param8, &pList[n].param9, &pList[n].param10, &pList[n].param11, &pList[n].param12, &pList[n].param13 ) )
{ //Если чтение успешно печатает n-ую структуру printf ( "%04d %02d %02d %d %d %d %d %d %d %d %d %d %d\n", pList[n].year, pList[n].month, pList[n].day, pList[n].param4, pList[n].param5, pList[n].param6, pList[n].t, pList[n].param8, pList[n].param9, pList[n].param10, pList[n].param11, pList[n].param12, pList[n].param13 ); if (pList[n].t!=9999){ if (pList[n].year!=current_year) { fprintf (file2, "%04d %d %d %.4f \n", current_year, current_sum, l, arifmet); current_sum=0; l=1; current_year = pList[n].year; } else { current_sum+=pList[n].t; l++; } sum+=pList[n].t; k++; arifmet=double(current_sum)/double(l); arifmet2=double(sum)/double(k); // if (current_year==2010){ fprintf(file3, "%.3f \n", arifmet2 ); fclose(file3); // } }
n++;//увеличиваем счётчик структур pList = (FILE_DATA *) realloc//Увеличиваем память под массив структур ( (void *)pList, (1 + n)*sizeof(FILE_DATA)//одновременно );
}
} // fwrite(file2,arifmet); fclose(file); fclose(file2);
if(n == 0) printf("File input.txt not contain correct data\n"); else { printf("Totlal count of read structures %d\n", n); //здесь у нас массив структур из n элементов //далее делам с ним что душе угодно } } printf("Enter any key for exit\n"); getchar(); return 0; }
|
Как изменить код так, чтобы файлы программа перебирала автоматически, а не в ручную? |