Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2012, 17:25   #1
kuziashagrath85
 
Регистрация: 31.07.2012
Сообщений: 5
По умолчанию С++. Чтение из группы файлов

Есть 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;
}
Как изменить код так, чтобы файлы программа перебирала автоматически, а не в ручную?
kuziashagrath85 вне форума Ответить с цитированием
Старый 03.08.2012, 18:03   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,372
По умолчанию

Выносим обработку одного отдельно взятого файла в отдельную функция, с аргументом имя исходного файла, имя получаемого файла. Делаем функцию генерящую имя получаемого файла на базе исходного файла и вызываем первую функцию. Меняем main функцию чтоб читала список файлов в папке и вызывала вторую функцию. Смотрим opendir(), closedir(), readdir()
waleri вне форума Ответить с цитированием
Старый 05.08.2012, 21:50   #3
kuziashagrath85
 
Регистрация: 31.07.2012
Сообщений: 5
По умолчанию

PHP код:
Выносим обработку одного отдельно взятого файла в отдельную функцияс аргументом имя исходного файлаимя получаемого файла 
А что это за функция в С++?
PHP код:
функцию генерящую имя получаемого файла на базе исходного файла 
аналогичный вопрос
kuziashagrath85 вне форума Ответить с цитированием
Старый 05.08.2012, 22:35   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,372
По умолчанию

Такой фунцкии нет - вам нужно написать ее самой... Если вам надо, чтоб ее написали за вас, тогда извинте, я не понял, какого рода помощь вам нужна.
waleri вне форума Ответить с цитированием
Старый 05.08.2012, 23:18   #5
kuziashagrath85
 
Регистрация: 31.07.2012
Сообщений: 5
По умолчанию

тогда поставлю вопрос по другому. Я слышал здесь подходит функция FindFirst и FindNext. Однако порывшись по интернету я так и не нашел место, как правильно ее использовать.Не могли бы Вы скинуть подобную инофрмацию,если она есть?
kuziashagrath85 вне форума Ответить с цитированием
Старый 05.08.2012, 23:31   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

даже два примера сразу нашел... поиск 1 сек )
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие группы файлов и выполнение в них макроса. drNabla Microsoft Office Excel 23 25.04.2012 00:16
подбор группы файлов до заданого размера Zeon25 Microsoft Office Excel 40 27.01.2011 11:40
Переименование группы файлов Meh Общие вопросы Delphi 2 28.07.2009 12:31
Макрос в Excel для обработки группы файлов ad_sum Microsoft Office Excel 1 29.12.2007 16:56