Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
#1

Считывание из файла - C++

30.07.2012, 22:39. Просмотров 2028. Ответов 20
Метки нет (Все метки)

Ребят, помогите, пожалуйста, новичку разобраться=)
Есть файл, в котором расположена информация примерно такого содержания
1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
1946 12 31 0 -528 0 -499 0 9999 9 0 2 0
1947 1 1 0 -477 0 -383 0 -366 0 1 0 0
1947 1 2 0 -406 0 -356 0 -335 0 5 0 0
1947 1 3 0 -481 0 -408 0 -373 0 0 2 0
Нужно считать информацию из файла 4 столбца(1-столбец год, второй-месяц-3-день и 8-температура). Причем если в 8 столбце стоит значение 9999, то строку не выписывать во второй файл. Затем надо посчитать и вывести среднее арифметическое температур по годам , т.е. среднюю температуруза 47 год, 48 и т.д. Подскажите, как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 22:39     Считывание из файла
Посмотрите здесь:

считывание с файла - C++
файл содержит data.txt: 200 185 170 160 76 54.9 39 27 7.5 10.7 12.9 15.9 6.5 7.9 12 12 ...

Считывание с файла - C++
ВСЕМ ПРИВЕТ!Я пишу программу смысл ее такой: создан файл key.txt(в этом файле написано 1234) при запуске программы она нам покажет если в...

Считывание с файла - C++
char TextForKey="text text1 text2";//текст как сделать что бы "text text1 text2" этот текст брался с файла???

считывание с файла - C++
помогите, пожалуйста, нужно считать с файла ряд целых чисел и переписать его куда-то чтобы потом можно было сделать с ним операции

Считывание из файла - C++
Нужно считать из файла данные (по слову). Считывается только по символу. Помогите, пожалуйста, исправить. Может нужно перегрузить >> , если...

Считывание из файла - C++
Помогите пожалуйста! Почему не работает? Нужно считать из файла в двумерный массив матрицу состоящую из 0 и 1. char **table; ...

Считывание из файла - C++
Создайте конструктор, который считывает координаты центра и радиус из заранее подготовленного текстового файла на магнитном диске и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 17:42     Считывание из файла #16
kuziashagrath, можно ещё раз попросить задание полностью, т.е куда что писать, среднее арифметическое чего от чего, чтобы я писал уже готовый код под твои нужды
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
01.08.2012, 11:43  [ТС]     Считывание из файла #17
Юр, спасибо тебе огромное, код почти написан, осталось разобраться, почему он ругается и при переходе с одной строки на другую=)) Были даны 13 столбцов, из них надо было убрать те строки, где есть цифра 9999, затем взять среднее арифметическое по годам, т.е. взять среднее за 1958 год, 59 и т.д. и вывести это все в печать=)) В общем, в принципе писать особо ничего не надо, спаисбо тебе огромное-итак фактически задание за меня сделал. Тут спасибо ввиде +1 выдается?=)) У меня была идея такая-поставить в цикл условия-если цифра в 13 столбце и в n+1 строке= n строке, тогда суммируем элементы, если же равентсво не выполняется, тогда выводим на печать сумму и количество подсчитанных строк(ну и их отношения). далее обнуляем их и пускаем заново цикл.Вот собственно фактически твоя же программа
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
//1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
typedef struct
{
    int year;
    int month;
    int day;
    int param4;
    int param5;
    int param6;
    int param7;
    int param8;
    int t;
    int param10;
    int param11;
    int param12;
    int param13;
}FILE_DATA;
int l=0;
int sum=0;
int arifmet;
int main()
{
    int i;//Счётчик
    int n = 0;//Будет содержать число ситанных строк
    FILE_DATA * pList = NULL;//Указатель на массив структур FILE_DATA
    FILE * file = fopen("U24763","rb");//Инициализируем поток чтения
    FILE * file2 = fopen("input2.txt","w");
 
 
    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].param7,
                    &pList[n].param8,
                    &pList[n].t,
                    &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].param7,
                    pList[n].param8,
                    pList[n].t,
                    pList[n].param10,
                    pList[n].param11,
                    pList[n].param12,
                    pList[n].param13
                   );
                if (pList[n].t!=9999){
 
                    if (pList[n+1].year==pList[n].year){
                        sum=sum+pList[n].t;
                         l++;}
                     else   {
                             fprintf
                              (file2,
                                "%04d \n",
                                  pList[n].year,
                                  sum/(l+1));
                                  sum=0;
                                    l=0;
                                }
 
 
                                        }
 
                n = n + 1;//увеличиваем счётчик структур
                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;
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                    if (pList[n+1].year==pList[n].year){
                        sum=sum+pList[n].t;
                         l++;}
                     else   {
                             fprintf
                              (file2,
                                "%04d \n",
                                  pList[n].year,
                                  sum/(l+1));
                                  sum=0;
                                    l=0;
                                }
 
 
                                        }
а вот главное отличие=)) только он почему то ругается при переходе с одного года на другой. Если сможешь подсказать ошибку, суперски. Если замучал-спасибо тебе огромное-очень сильно помог и так!=))


а само задание изначально выглядело примерно так
1966 3 18 0 -343 0 -240 0 -148 0 0 2 0
1966 3 19 0 -348 0 -234 0 -146 0 0 2 0
1967 3 20 0 -240 0 -174 0 -110 0 0 2 0
1967 3 21 0 -158 0 -132 0 -109 0 16 0 0
1968 3 22 0 -164 0 -103 0 -44 0 16 0 0
1968 3 23 0 -130 0 -116 0 -63 0 0 2 0
1968 3 24 0 -184 0 -139 0 -90 0 0 2 0
1969 3 25 0 -154 0 -133 0 -91 0 0 2 0
1969 3 26 0 -245 0 -166 0 -72 0 2 0 0
1969 3 27 0 -293 0 -175 0 -54 0 0 2 0
1970 3 28 0 -262 0 -158 0 -54 0 0 2 0
1970 3 29 0 -194 0 -95 0 -2 0 4 0 0
1970 3 30 0 -104 0 -53 0 0 0 0 2 0
-=ЮрА=-
Заблокирован
Автор FAQ
01.08.2012, 12:57     Считывание из файла #18
kuziashagrath, твой код править не хочу (кроме моей части в нём нет ничего верного прошу не воспринимать это как личное). Также исходных данных не достаточно, пишешь о 59-м годе а вривёл 46-47,66-70 (запомни правильное задание все исходные данные это единственный ключ к тому чтобы код решал именно ту задачу которую тебе требуется).
Короче я немножко подправил твои исходные данные(добил в паре строк в 9-й столбец 9999), а также находил средне для 7-го столбца т.к последний (как я понял темпереатура во всех строках == 0 и не видно было бы подсчёта среднего).
Ниже код который после прочтения данных запрашивает нужный год и осуществляет выгрузку валижных строк нужного года в файл одновременно подсчитывая среднее в 7-м столбце(опять же для строк без 9999 в 9-м столбце)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <stdio.h>
#include <stdlib.h>
 
//1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
typedef struct
{
    int year;
    int month;
    int day;
    int param4;
    int param5;
    int param6;
    int param7;
    int param8;
    int param9;
    int param10;
    int param11;
    int param12;
    int t;
}FILE_DATA;
 
int main()
{
    int i;//Ñ÷¸ò÷èê
    int n = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî Г±ГЁГІГ*Г*Г*ûõ ñòðîê
    double middle = 0;//Áóäåò ñîäåðæГ*ГІГј ñðåäГ*ГҐ Г§Г*Г*Г·ГҐГ*ГЁГҐ 7-ГЈГ® ñòîëáöГ*
    //Г*Г*äî áóäåò äðóãîé ïðîñòî Гў êîäå óñëîâèå(ГўГҐГ°Г*ГҐГ© ГЁГ*äåêñ ïîìåГ*ГїГҐГ¬)
    int m = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî Г§Г*ГЇГЁГ±ГҐГ© Г*ГіГ¦Г*îãî ãîäГ* Гў êîòîðûõ 9-Г© ñòîëáåö Г*ГҐ 9999
    int year = 0;//Áóäåò ñîäåðæГ*ГІГј Г§Г*Г*Г·ГҐГ*ГЁГҐ ãîäГ* äëÿ êîòîðîãî îñóùåñòâëÿåòñÿ Г°Г*Г±Г·ВёГІ
    FILE_DATA * pList = NULL;//ÓêГ*Г§Г*òåëü Г*Г* Г¬Г*Г±Г±ГЁГў ñòðóêòóð FILE_DATA
    FILE * file = fopen("input.txt","rb");//Г€Г*èöèГ*ëèçèðóåì ïîòîê Г·ГІГҐГ*ГЁГї
    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].param7,
                    &pList[n].param8,
                    &pList[n].param9,
                    &pList[n].param10,
                    &pList[n].param11,
                    &pList[n].param12,
                    &pList[n].t
                )
            )
            {
                //Åñëè Г·ГІГҐГ*ГЁГҐ ГіГ±ГЇГҐГёГ*Г® ГЇГҐГ·Г*ГІГ*ГҐГІ 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].param7,
                    pList[n].param8,
                    pList[n].param9,
                    pList[n].param10,
                    pList[n].param11,
                    pList[n].param12,
                    pList[n].t
                );
                n = n + 1;//óâåëè÷èâГ*ГҐГ¬ Г±Г·ВёГІГ·ГЁГЄ ñòðóêòóð
                pList = (FILE_DATA *)
                    realloc//Óâåëè÷èâГ*ГҐГ¬ ГЇГ*ìÿòü ïîä Г¬Г*Г±Г±ГЁГў ñòðóêòóð
                    (
                        (void *)pList, 
                        (1 + n)*sizeof(FILE_DATA)//îäГ*îâðåìåГ*Г*Г® 
                    );
                
            }
        }
        fclose(file);
        if(n == 0)
            printf("File input.txt not contain correct data\n");
        else
        {
            printf("Totlal count of read structures %d\n", n);
            //çäåñü Гі Г*Г*Г± Г¬Г*Г±Г±ГЁГў ñòðóêòóð ГЁГ§ n ýëåìåГ*òîâ
            //Г¤Г*ëåå äåëГ*Г¬ Г± Г*ГЁГ¬ Г·ГІГ® äóøå óãîäГ*Г®
 
            //Гџ ГІГ*ГЄ ГЇГ®Г*ГїГ« ìû Гў ГґГ*éë äîëæГ*Г» Г*ГіГ¦Г*ûé ãîä ïåðåГ*ГҐГ±ГІГЁ
            //Г*Гі ГІГ*ГЄ èñïîëüçóåì òîò æå ГіГЄГ*Г§Г*òåëü
            file = fopen("output.txt","wt");
            if(file == NULL)
                printf("Error open output.txt\n");
            else
            {
                printf("Enter year : ");
                scanf("%d",&year);//Ââîäèì ГЁГ*òåðåñóþùèé Г*Г*Г± ãîä
                getchar();//ÓáèðГ*ГҐГ¬ \n îò ââîäГ* Enter
                for(i = 0; i < n; i = i + 1)
                {
                    //ÏðîâåðêГ* Г·ГІГ® ãîä òîò Г·ГІГ® ìû ГЁГ№ГҐГ¬
                    if(pList[i].year == year)
                    //ÏðîâåðêГ* 9-Г© ñòîëáåö != 9999
                    if(pList[i].param9 != 9999)
                    {
                        //Гџ ïëþñóþ 7-Г© ñòîëáåö Г* ГІГ*Г¬ óæå ïëþñóé ГЄГ*êîé ГІГҐГЎГҐ Г*Г*äî
                        middle = middle + pList[i].param7;
                        m = m + 1;//Óâåëè÷èâåì Г±Г·ВёГІГ·ГЁГЄ Г§Г*ГЇГЁГ±ГҐГ©
                        //óäîâëåòâîðÿþùèõ Г*Г*øåìó êðèòåðèþ 
                        //ãîä + 9 ñòîëáåö!=9998
                        //ГЏГЁГёГҐГ¬ Гў ГґГ*éëèê
                        fprintf
                        (
                            file,
                            "%d %d %d %d %d %d %d %d %d %d %d %d %d\n",
                            pList[i].year,
                            pList[i].month,
                            pList[i].day,
                            pList[i].param4,
                            pList[i].param5,
                            pList[i].param6,
                            pList[i].param7,
                            pList[i].param8,
                            pList[i].param9,
                            pList[i].param10,
                            pList[i].param11,
                            pList[i].param12,
                            pList[i].t
                        );
                    }
                }
                fclose(file);
                if(m == 0)
                    printf("input.txt not contain neccessary data\n");
                else
                {
                    printf
                    (
                        "middle value of 7-th column : %.3f\n",//ГЌГ*ïîìèГ*Г*Гѕ äëÿ ГўГҐГ№ГҐГ±ГІГўГҐГ*Г*îãî ГІГ*êîé ñïåöèôèêГ*òîð
                        (middle / m)//Äåëèì Г*Г*ГёГі ñóììó Г*Г* ÷èñëî ГўГ*ëèäГ*ûõ ñòðîê
                    );
                }
            }
        }
    }
    printf("Enter any key for exit\n");
    getchar();
    return 0;
}
output.txt
1968 3 22 0 -164 0 -103 0 -44 0 16 0 0
1968 3 23 0 -130 0 -116 0 -63 0 0 2 0
Миниатюры
Считывание из файла  
-=ЮрА=-
Заблокирован
Автор FAQ
01.08.2012, 13:03     Считывание из файла #19
Касательно твоих ошибок
Цитата Сообщение от kuziashagrath Посмотреть сообщение
if (pList[n].t!=9999){
- чё за бред, тебе 9-й столбец надо а не столбец температуры
Цитата Сообщение от kuziashagrath Посмотреть сообщение
Причем если в 8 столбце стоит значение 9999, то строку не выписывать во второй файл.
- причём по файлу как я понял это 9-й а не 8-й столбец

Цитата Сообщение от kuziashagrath Посмотреть сообщение
if (pList[n+1].year==pList[n].year){
* * * * * * * * * * * * sum=sum+pList[n].t;
* * * * * * * * * * * * *l++;}
* * * * * * * * * * *else * {
* * * * * * * * * * * * * * *fprintf
* * * * * * * * * * * * * * * (file2,
* * * * * * * * * * * * * * * * "%04d \n",
* * * * * * * * * * * * * * * * * pList[n].year,
* * * * * * * * * * * * * * * * * sum/(l+1));
* * * * * * * * * * * * * * * * * sum=0;
* * * * * * * * * * * * * * * * * * l=0;
* * * * * * * * * * * * * * * * }
- дурацкое условие, хотя да оно способно отработать но концепт неверный, проберать надо все строки (а если бы всё не отсортированно по годам было и скажем за 59 1-й тсрокой шёл 78 - как бы твой алгоритм работал?)

Цитата Сообщение от kuziashagrath Посмотреть сообщение
"%04d \n",
* * * * * * * * * * * * * * * * * pList[n].year,
* * * * * * * * * * * * * * * * * sum/(l+1));
- кто считает среднее арифметическое как целое
К примеру идут числа 17 + 4 + 5 ну чему равно их среднее арифметическое? наверное 26/3 ~ 8.67 но никак не 8 который получится при целочисленном делении 26 на 3.
Есть ещё замечания но они не концептуальны и их пожалуй опущу...
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
02.08.2012, 16:10  [ТС]     Считывание из файла #20
Юр, еще раз спасибо огромное за коды, в результате разобрался где у меня ошибка. Понял, где и как выводить. Кстати, я долольно простой человек, так что не обижаюсь на критику, отношусь с юмором. Я учусь, а если делаешь что то впервые, ошибки неизбежны=)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 16:15     Считывание из файла
Еще ссылки по теме:

Считывание из файла - C++
есть кодик int main(int argc, char* argv) { setlocale(LC_ALL, &quot;RUS&quot;); char c = 0; int n = 0, j = 0; int *a; ifstream...

Считывание из файла - C++
//test.cpp #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void main() { ifstream input(&quot;input.txt&quot;); ...

Считывание из файла - C++
Ребят,подскажите пожалуйста: Нужно считать из файлов значения. Я создал два класса,в которых есть переменные,в которые будут считываться...

Считывание из файла - C++
как считать из файла число, в котором оно будет задаваться в виде ASCII графики где белый цвет обозначен символом &quot;.&quot;, светло-серый - &quot;%&quot;,...

Считывание из файла С++ - C++
Программа, которая считывает текст из файла и выводит его на экран, заменив цифры от &quot;0&quot; до &quot;9&quot; словами (ноль, один два), начиная каждое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2012, 16:15     Считывание из файла #21
Ну тогда здорово, я рад что мои писюльки пригодились
Yandex
Объявления
02.08.2012, 16:15     Считывание из файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru