Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.07.2012, 22:39. Просмотров 2080. Ответов 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 и т.д. Подскажите, как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из файла (C++):

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Считывание файла в массив и запись нового файла - C++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

Считывание из файла - C++
Нужна помощь, уже не знаю, что делать. Проблема: Имеется функция для добавления хешированного логина и пароля в двоичный файл. ...

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

Считывание с файла - C++
Помогите организовать считывание с файла для следующего задания: Нужно создать программу которая считывает с файла параметры...

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

20
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
30.07.2012, 23:08 #2
Считываете число за числом, считая число считанных чисел. Пусть это число (число считанных чисел) равно n.
Берете остаток от деления этого n на число столбцов. Получаете конкретный индекс столбца.
В зависимости от этого номера, кладете в соответствующую ячейку структуры. Что то вроде
C++
1
2
3
4
5
6
struct S {
  int year;
  int month;
  int year;
  int t;
};
И кладете в массив или в вектор сформированную строку (когда n % 8 == 0). Получаете массив структур. Поиск среднего арифметического по годам - тривиально.

Дерзайте.
1
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
30.07.2012, 23:10 #3
Считываешь построчно и делаешь анализ строки.
Код за тебя писать никто не будет.
для анализа даты и прочего, разбираешь строку. ТО есть начиная от нуля до первого пробела - это год, дальше от проблел+1 до след пробела - это месяц и так далее анализируешь.
Если тебе не надо анализировать даты и прочее а нудно только находить 9999 то делаешь поиск по строке, если он вернул позицию - значит не выполняем запись. и так далее.
0
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
31.07.2012, 01:27  [ТС] #4
Считываете число за числом, считая число считанных чисел. Пусть это число (число считанных чисел) равно n.
Берете остаток от деления этого n на число столбцов. Получаете конкретный индекс столбца.
В зависимости от этого номера, кладете в соответствующую ячейку структуры. Что то вроде
C++
1
2
3
4
5
6
struct S {
  int year;
  int month;
  int year;
  int t;
};
И кладете в массив или в вектор сформированную строку (когда n % 8 == 0). Получаете массив структур. Поиск среднего арифметического по годам - тривиально.



ТОгда такой вопрос. Вот мой код
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXLEN 1024
 
int main(void)
{
    FILE *ifp;
   FILE *fout
    int i, maxline = 8;
    char **lines, **p, buf[MAXLEN];
 
    if( (ifp = fopen("U24763", "r")) == NULL) {
        perror("fopen");
        return 1;
    }
    if(fout = fopen("results"),"w"){
 
    }
 
    if( (lines = (char **) malloc(sizeof(char *) * maxline)) == NULL) {
        perror("malloc");
        return 1;
    }
    for(i = 0; ; i++) {
        if(i >= maxline) {
            maxline *= 2;
            if( (p = (char **) realloc(lines, sizeof(char *) * maxline)) == NULL) {
                perror("realloc");
                return 1;
            }
            lines = p;
        }
        if( (lines[i] = (char *) malloc(MAXLEN)) == NULL) {
            perror("malloc");
            return 1;
        }
        if(fgets(buf, sizeof(buf), ifp) == NULL)
            break;
        strcpy(lines[i], buf);
    }
    fclose(ifp);
    maxline = i + 1;
    for(i = 0; i < maxline; i++)
        printf("%s", lines[i]);
    fwrite("%s", lines[i]);
   fclose(fout);
    return 0;
}
При записывании из одного файла в другой выдает массу ошибок. Что я делаю неверно?
0
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
31.07.2012, 01:51 #5
Цитата Сообщение от kuziashagrath Посмотреть сообщение
for(i = 0; i < maxline; i++)
printf("%s", lines[i]);
fwrite("%s", lines[i]);
С ходу вижу только вот это.
i - необъявленный идентификатор.
Забыли где надо фигурные скобки.

В следующий раз используйте теги [ CPP ] [ / CPP ]

Ух как даже. Вы переопределили занова идентификатор. Не стоит так делать. Нечитабельно.

Добавлено через 10 минут
Быть может вот так будет по-лучше?
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXLEN 1024
 
int main(void)
{
    FILE *ifp;
    FILE *fout
    int i, maxline = 8;
    char **lines, **p, buf[MAXLEN];
 
    if( (ifp = fopen("U24763", "r")) == NULL) {
        perror("fopen");
        return 1;
    }
    if(fout = fopen("results"),"w"){
 
    }
 
    if( (lines = (char **) malloc(sizeof(char *) * maxline)) == NULL) {
        perror("malloc");
        return 1;
    }
    for(i = 0; ; i++) {
        if(i >= maxline) {
            maxline *= 2;
            if( (p = (char **) realloc(lines, sizeof(char *) * maxline)) == NULL) {
                perror("realloc");
                return 1;
            }
        lines = p;
        }
        if( (lines[i] = (char *) malloc(MAXLEN)) == NULL) {
            perror("malloc");
            return 1;
        }
        if(fgets(buf, sizeof(buf), ifp) == NULL)
            break;
        strcpy(lines[i], buf);
    }
    fclose(ifp);
    maxline = i + 1;
    for(i = 0; i < maxline; i++)
        printf("%s", lines[i]);
    fwrite("%s", lines[i]);
    fclose(fout);
    return 0;
}
Добавлено через 8 минут
Документация к
C++
1
fwrite("%s", lines[i]);
Для чтения и записи данных, тип которых может занимать более 1 байта, в файловой системе языка С имеется две функции: fread() и fwrite(). Эти функции позволяют читать и записывать блоки данных любого типа. Их прототипы следующие:

C++
1
2
size_t fread(void *буфер, size_t колич_байт, size_t счетчик, FILE *уф);
size_t fwrite(const void *буфер, size_t колич_байт, size_t счетчик, FILE *уф);
Используйте fprintf();

Вот еще...
C++
1
maxline = i + 1;
После выделения для i-ой ячейки массива памяти, i - инкрементируется. Далее, maxline = i + 1; а далее - цикл по i до maxline. Последний элемент массива - не существует.
Аналогично для заведомо неверного fwrite.

К тому же, в файл вы пытаетесь записать только последнюю считанную строку. Имейте это в виду.

Добавлено через 1 минуту
Как то так. Невооруженным взглядом больше ошибок не видно.
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 10:42 #6
HomeR_J_SimpsoN, нельзя так читать это файл как ты предлагаешь - числа там записаны в текстовом формате, а fread читаем бинарку. Для данного задания следует использовать либо fscanf либо если пишем на плюсах то потоковый ввод ifstream >>
0
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
31.07.2012, 10:54 #7
C++
1
if(fout = fopen("results"),"w"){
Не понятно, но здорово..

Я б считывал всю строку и использовал
C++
1
int sscanf ( const char * str, const char * format, ...);
.
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 11:08 #8
Ниже код на Си по чтению и печати содержимого файла, как поступать с массивом структур это на ваше усмотрение
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
#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;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî Г±ГЁГІГ*Г*Г*ûõ ñòðîê
    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 ýëåìåГ*òîâ
            //Г¤Г*ëåå äåëГ*Г¬ Г± Г*ГЁГ¬ Г·ГІГ® äóøå óãîäГ*Г®
        }
    }
    printf("Enter any key for exit\n");
    getchar();
    return 0;
}
input.txt
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
Проверка http://codepad.org/BAbYwLLY

Не по теме:

PS:Dr.Urban, не зачем этого делать - во первых мы наперёд ограничиваем длинну данных в строке(т.к. строку определённой длинны будем использовать), затем в дальнейшем при разборе всё равно бы scanf-или уже строку а не поток.

1
Миниатюры
Считывание из файла  
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 11:26 #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
#include <fstream>
#include <iomanip>
#include <iostream>
using namespace std;
 
//Íåáîëüøîé âåëîñèïåäèê ГЇГ® äèГ*Г*ìè÷åñêîìó Г*ëëîêó Гў ïëþñГ*Гµ
template <class T>
T * cpp_realloc(T * ptr, int size)
{
    T * mem = new T[size];
    if(ptr)
    {
        mem = new T[size];
        memcpy((void *)mem,(void *)ptr,size);
        delete [] ptr;
    }
    return ptr = mem;
}
 
//1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
struct FILE_DATA
{
    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;
};
 
int main()
{
    int i;//Ñ÷¸ò÷èê
    int n = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî Г±ГЁГІГ*Г*Г*ûõ ñòðîê
    FILE_DATA * pList = NULL;//ÓêГ*Г§Г*òåëü Г*Г* Г¬Г*Г±Г±ГЁГў ñòðóêòóð FILE_DATA
    ifstream file("input.txt");//Г€Г*èöèГ*ëèçèðóåì ïîòîê Г·ГІГҐГ*ГЁГї
    if(!file.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Âûäåëÿåì ГЇГ*ìÿòü ïîä ïåðâóþ ñòðóêòóðó Г¬Г*Г±Г±ГЁГўГ*
        pList = new FILE_DATA[1];
        for(n = 0; !file.eof(); )
        {
            //Г‚ ïëþñГ*Гµ Г*Г*ГЄГЁГ*ГіГў if òîæå ìîæГ*Г® ïðîâåðèòü 
            //êîððåêòГ*îñòü Г·ГІГҐГ*ГЁГї ГЇГ*Г°Г*ìåòðîâ
            if
            (file>>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-ГіГѕ ñòðóêòóðó
                cout<<setw(4)<<pList[n].year<<" "
                    <<setw(2)<<pList[n].month<<" "
                    <<setw(2)<<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<<endl;
                n = n + 1;//óâåëè÷èâГ*ГҐГ¬ Г±Г·ВёГІГ·ГЁГЄ ñòðóêòóð
                pList = (FILE_DATA *)
                    cpp_realloc//Óâåëè÷èâГ*ГҐГ¬ ГЇГ*ìÿòü ïîä Г¬Г*Г±Г±ГЁГў ñòðóêòóð
                    (
                        pList, 
                        (1 + n)
                    );
                
            }
        }
        file.close();
        if(n == 0)
            cout<<"File input.txt not contain correct data"<<endl;
        else
        {
            cout<<"Totlal count of read structures "<<n<<endl;
            //çäåñü Гі Г*Г*Г± Г¬Г*Г±Г±ГЁГў ñòðóêòóð ГЁГ§ n ýëåìåГ*òîâ
            //Г¤Г*ëåå äåëГ*Г¬ Г± Г*ГЁГ¬ Г·ГІГ® äóøå óãîäГ*Г®
        }
    }
    cout<<"Enter any key for exit"<<endl;
    getchar();
    return 0;
}
Проверка http://codepad.org/k438viRn
0
Миниатюры
Считывание из файла  
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
31.07.2012, 11:54 #10
-=ЮрА=-,

Не по теме:

Спасибо за СИ-шный код,много полезного извлек

0
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 11:55 #11
Вот вариант с картой
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
#include <map>
#include <vector>
#include <fstream>
#include <iomanip>
#include <iostream>
using namespace std;
 
//1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
struct FILE_DATA
{
    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;
};
 
int main()
{
    int n;
    FILE_DATA pDATA = {0};//Òåïåðü Г*Г*Г¬ Г*ГіГ¦Г*Г* ГўГ±ГҐГЈГ® 1-Г*Г* ñòðóêòóðГ*
    //Г‡Г*ìåГ*ГЁГ¬ Г*Г*Гё ГіГЄГ*Г№Г*òåëü Г*Г* Г¬Г*Г±Г±ГЁГў Г*Г* ГЄГ*ðòó (Г¬Г*ГЇГі)
    map<int, FILE_DATA> mymap;
    map<int, FILE_DATA>::iterator it;//ГЁГІГҐГ°Г*òîð (ГІГЁГЇГ* Г±Г·ВёГІГ·ГЁГЄГ*)
    ifstream file("input.txt");//Г€Г*èöèГ*ëèçèðóåì ïîòîê Г·ГІГҐГ*ГЁГї
    if(!file.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Âûäåëÿåì ГЇГ*ìÿòü ïîä ïåðâóþ ñòðóêòóðó Г¬Г*Г±Г±ГЁГўГ*
        for(n = 0;!file.eof(); )
        {
            //Г‚ ïëþñГ*Гµ Г*Г*ГЄГЁГ*ГіГў if òîæå ìîæГ*Г® ïðîâåðèòü 
            //êîððåêòГ*îñòü Г·ГІГҐГ*ГЁГї ГЇГ*Г°Г*ìåòðîâ
            if
            (file>>pDATA.year
                >>pDATA.month
                >>pDATA.day
                >>pDATA.param4
                >>pDATA.param5
                >>pDATA.param6
                >>pDATA.param7
                >>pDATA.param8
                >>pDATA.param9
                >>pDATA.param10
                >>pDATA.param11
                >>pDATA.param12
                >>pDATA.t
            )
            {
                //âîò ГІГ*ГЄ äîáГ*âëåì Гў ГЄГ*ðòó ýëåìåГ*ГІ
                //ГЁ Г*ГҐ äóìГ*ГҐГ¬ Г® äèГ*Г*ìè÷åñêîì âûäåëåГ*ГЁГЁ ГЇГ*ìÿòè
                mymap.insert(make_pair(n,pDATA));
                n = n + 1;//óâåëè÷èâГ*ГҐГ¬ Г±Г·ВёГІГ·ГЁГЄ ñòðóêòóð
            }
        }
        file.close();
        if(n == 0)
            cout<<"File input.txt not contain correct data"<<endl;
        else
        {
            cout<<"Totlal count of read structures "<<n<<endl;
            //çäåñü Гі Г*Г*Г± Г¬Г*Г±Г±ГЁГў ñòðóêòóð ГЁГ§ n ýëåìåГ*òîâ
            //Г¤Г*ëåå äåëГ*Г¬ Г± Г*ГЁГ¬ Г·ГІГ® äóøå óãîäГ*Г®
            //ÏîêГ*çûâГ*Гѕ ГЄГ*ГЄ Г·ГЁГІГ*ГІГј ГЄГ*ðòó
            for(it = mymap.begin(); it != mymap.end(); it++)
            {
                pDATA = (*it).second;
                cout<<setw(4)<<pDATA.year<<" "
                    <<setw(2)<<pDATA.month<<" "
                    <<setw(2)<<pDATA.day<<" "
                    <<pDATA.param4<<" "
                    <<pDATA.param5<<" "
                    <<pDATA.param6<<" "
                    <<pDATA.param7<<" "
                    <<pDATA.param8<<" "
                    <<pDATA.param9<<" "
                    <<pDATA.param10<<" "
                    <<pDATA.param11<<" "
                    <<pDATA.param12<<" "
                    <<pDATA.t<<endl;
            }
        }
    }
    cout<<"Enter any key for exit"<<endl;
    getchar();
    return 0;
}
0
Миниатюры
Считывание из файла  
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 12:06 #12
Вот некая абстракция для последнего кода с картой (для лучшего понимания)
http://codepad.org/q5b4MSQy
0
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
31.07.2012, 13:42  [ТС] #13
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
#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;//Будет содержать число ситанных строк
    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].param9,
                    &pList[n].param10,
                    &pList[n].param11,
                    &pList[n].param12,
                    &pList[n].t
                )
            )
 
 
                if( &pList[n].param9 ! == 9999
 
                    {
                //Если чтение успешно печатает 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
                );
 
                fprintf
                (file2,
                    "%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);
        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;
}
Юрий,Спасибо огромное! Я попробовал Ваш первый код, работает,все замечательно! У меня теперь вот такой вопрос. Я хочу вывести только те строки, где у меня в 9 столбце нет числа 9999. Я поставил условие
C++
1
  if( &pList[n].param9 ! == 9999);
В чем здесь ошибка?
0
-=ЮрА=-
Заблокирован
Автор FAQ
31.07.2012, 14:19 #14
Цитата Сообщение от kuziashagrath Посмотреть сообщение
if( &pList[n].param9 ! == 9999);
сразу три - вот так это условие следует записать
C
1
2
3
4
if( pList[n].param9 ! = 9999)
{
     //
}
0
kuziashagrath
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 50
31.07.2012, 17:34  [ТС] #15
Еще раз спасибо огромное,Юрий! Да, все-таки я Вас еще помучаю=))
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
134
135
136
137
#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){
 
 
 
 
                fprintf
                (file2,
                    "%04d %02d %02d %d %d %d \n",
                    pList[n].year,
                    pList[n].month,
                    pList[n].day,
                    pList[n].t,
                     l,
                    sum);
 
//                );
 
                }
                sum=sum+pList[n].t;
                 l+=1;
 
                n = n + 1;//увеличиваем счётчик структур
                pList = (FILE_DATA *)
                    realloc//Увеличиваем память под массив структур
                    (
                        (void *)pList,
                        (1 + n)*sizeof(FILE_DATA)//одновременно
                    );
 
 
           }
 
        }
//          arifmet=sum/l;
          fprintf(file2,"%d",sum/l);
        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
          fprintf(file2,"%d",sum/l);
0
31.07.2012, 17:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2012, 17:34
Привет! Вот еще темы с ответами:

Считывание из файла - C++
#include &lt;iostream&gt; #include &lt;time&gt; #include &lt;fstream&gt; using namespace std; int linear_search(int array, int size, int...

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

считывание из файла c++ - C++
считываю из файла, но он не читает все строки, почему не знаю. Может кто-нибудь помочь? ifstream file(&quot;1.txt&quot;,ios::in); char...

Считывание из файла - C++
Всем привет! Есть вот такая проблема: при считывании данных из файла в объект ниоткуда берутся лишние данные. В чем может быть проблема?...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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