Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С++. Чтение из группы txt файлов, чтение из директории файлов 
:(
    Опции темы
kuziashagrath85
Дата 3.8.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



Есть 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;
}

Как изменить код так, чтобы файлы программа перебирала автоматически, а не в ручную? 
PM MAIL   Вверх
bsa
Дата 3.8.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



если у тебя Windows, то смотри в сторону _findfirst и _findnext; если у тебя Linux, то readdir или scandir.
PM   Вверх
xvr
Дата 6.8.2012, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Вспомнился анекдот -
В бане:
- Мойша Абрамович, вы или трусы наденьте, или крестик снимите  smile 

У вас так же: либо у вас С программа, тогда
Цитата(kuziashagrath85 @  3.8.2012,  17:04 Найти цитируемый пост)
#include <iostream>
лишнее, либо С++ - тогда malloc & realloc надо заменить на std::vector


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.