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

Есть файл с данными . Как переписать эти данные в массив структур? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 14:41     Есть файл с данными . Как переписать эти данные в массив структур? #1
Допустим есть файл 1.txt с данными:
123
789
456
733

Нужно из файла переписать данные в массив структур.
Например , есть такая структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct My
{int a;
 int b;
 int c;
 int d;
 }
int main()
{int n;
 cin>>n;
 My s=new My[n];
 
return 0;}
Получается в поле а должны быть данные из файла , которые находятся в 1-ом столбце 1,7,4,7
Помогите , пожалуйста , как это можно сделать ? Объясните , если можете , принцип записи .
Пока вообще не могу понять , как справиться с этой задачей.Как узнать , исходя из файла , сколько массивов структур будет ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2013, 14:41     Есть файл с данными . Как переписать эти данные в массив структур?
Посмотрите здесь:

C++ Как ввести данные в динамический массив структур?
Подскажите как записать массив структур в файл C++
Как объяснить в программе эти данные C++
C++ Выделить отдельные данные в файле и переписать в другой файл
C++ C++, переписать данные из файла в файл, отсортировав по фамилии и убыванию года рождения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 15:06     Есть файл с данными . Как переписать эти данные в массив структур? #2
Цитата Сообщение от NNN7 Посмотреть сообщение
Как узнать , исходя из файла , сколько массивов структур будет ?
Если запись структур бинарная:
C++
1
2
3
4
5
6
7
8
9
    ifstream fin("dat", ios::in | ios::binary);
    if (fin)
    {
        fin.seekg(0, ios::end);
        int size = fin.tellg();
        int N = size / sizeof(My); // количество структур в файле
 
        fin.seekg(0, ios::beg);
    }
Если текстовая, и структуры записаны строками, то считаете количество строк в файле.

Добавлено через 3 минуты
Цитата Сообщение от NNN7 Посмотреть сообщение
Допустим есть файл 1.txt с данными:
123
789
456
733
Откуда он такой взялся? Структура это строка?
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
12.10.2013, 15:21     Есть файл с данными . Как переписать эти данные в массив структур? #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Если запись структур бинарная:
C++
1
2
3
4
5
6
7
8
9
    ifstream fin("dat", ios::in | ios::binary);
    if (fin)
    {
        fin.seekg(0, ios::end);
        int size = fin.tellg();
        int N = size / sizeof(My); // количество структур в файле
 
        fin.seekg(0, ios::beg);
    }
Если текстовая, и структуры записаны строками, то считаете количество строк в файле.

Добавлено через 3 минуты

Откуда он такой взялся? Структура это строка?
Это просто данные с файла .
123
789
456
733

1-это а, 2-это b, 3- это с
Получается да , строка .
И запись получается текстовая.
А я думал , что количество массивов -это будет количество столбцов в файле..

Добавлено через 9 минут
Цитата Сообщение от VASYA_A Посмотреть сообщение
Это просто данные с файла .
123
789
456
733

1-это а, 2-это b, 3- это с
Получается да , строка .
И запись получается текстовая.
А я думал , что количество массивов -это будет количество столбцов в файле..
Извините , что вторгаюсь в чужую тему , тоже стало интересно
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 15:23  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #4
Цитата Сообщение от VASYA_A Посмотреть сообщение
Это просто данные с файла .
123
789
456
733

1-это а, 2-это b, 3- это с
Получается да , строка .
И запись получается текстовая.
А я думал , что количество массивов -это будет количество столбцов в файле..

Добавлено через 9 минут


Извините , что вторгаюсь в чужую тему , тоже стало интересно
Да вторгайтесь , мне не жалко.
Да , всё правильно вы поняли . Структура-это строка.Запись текстовая .
А вот как вычислить кол-во массивов - я не пойму.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 15:25     Есть файл с данными . Как переписать эти данные в массив структур? #5
Цитата Сообщение от VASYA_A Посмотреть сообщение
1-это а, 2-это b, 3- это с
Если структура такая:
struct My
{int a;
int b;
int c;
int d;
}
, то где тогда d?
Цитата Сообщение от VASYA_A Посмотреть сообщение
И запись получается текстовая.
Если текстовая, то числа должы быть через пробел записаны, иначе как их считывать?
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
12.10.2013, 15:26     Есть файл с данными . Как переписать эти данные в массив структур? #6
Хм, посчитать количество можно, например, так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    int n = 0;
    string tmp;
    while (getline(fin, tmp))
        ++n;
    fin.clear();
    fin.seekg(0);
    return 0;
}
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 15:28  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Если запись структур бинарная:
C++
1
2
3
4
5
6
7
8
9
    ifstream fin("dat", ios::in | ios::binary);
    if (fin)
    {
        fin.seekg(0, ios::end);
        int size = fin.tellg();
        int N = size / sizeof(My); // количество структур в файле
 
        fin.seekg(0, ios::beg);
    }
Если текстовая, и структуры записаны строками, то считаете количество строк в файле.

Добавлено через 3 минуты

Откуда он такой взялся? Структура это строка?
Да , структура - это получается строка .
Так как же вывести эти данные с файла в массив структур , чтобы можно было дальше работать с данными? Помогите ,пожалуйста!

Добавлено через 1 минуту
Цитата Сообщение от d1skort Посмотреть сообщение
Хм, посчитать количество можно, например, так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    int n = 0;
    string tmp;
    while (getline(fin, tmp))
        ++n;
    fin.clear();
    fin.seekg(0);
    return 0;
}
Можете , пожалуйста , расшифровать Ваш код?)
что такое n,tmp,что за условие у while?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 15:29     Есть файл с данными . Как переписать эти данные в массив структур? #8
Цитата Сообщение от NNN7 Посмотреть сообщение
А вот как вычислить кол-во массивов - я не пойму.
Цитата Сообщение от alsav22 Посмотреть сообщение
Если текстовая, и структуры записаны строками, то считаете количество строк в файле.
C++
1
2
3
4
5
6
7
8
9
    ifstream fin("dat");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N; 
        fin.clear();
        fin.seekg(0);
    }
Впрочем, d1skort уже написал как.
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
12.10.2013, 15:32     Есть файл с данными . Как переписать эти данные в массив структур? #9
Цитата Сообщение от NNN7 Посмотреть сообщение
Можете , пожалуйста , расшифровать Ваш код?)
что такое n,tmp,что за условие у while?
n - количество строк;
tmp - временная переменная куда мы будем считывать строки;
условие в цикле - пока не достигнут конец файла;
clear() - сброс состояния потока (?);
fin.seekg(0) - перейти к позиции 0, т.е. к началу файла;
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 15:35  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Если структура такая:

, то где тогда d?

Если текстовая, то числа должы быть через пробел записаны, иначе как их считывать?
точно , с d напутал . ну , пусть файл такой :
1 2 3 4
6 7 8 9
1 44 6 9
2 3 4 5

количество массивов получается -это количество строк, то есть 4. структура -это 1,2,3,4
Как тогда поступать ? Как считать с файла ? А потом передать то , что считали в структуру?
Для того , чтобы создать какое-то количество массивов структур , нужно найти количество столбцов в файле?
Помогите, пожалуйста . И извините за такое количество вопросов , я пока совсем новичок.Учусь только.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 15:41     Есть файл с данными . Как переписать эти данные в массив структур? #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    ifstream fin("dat");
    if (fin)
    {
        string str;
        int N = 0;
        
        while (getline(fin, str)) ++N;  // N - количество строк(структур) в файле
        fin.clear();
        fin.seekg(0);
 
        My *arr = new My[N];
 
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        fin.close();
    }
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 16:05  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #12
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    ifstream fin("dat");
    if (fin)
    {
        string str;
        int N = 0;
        
        while (getline(fin, str)) ++N;  // N - количество строк(структур) в файле
        fin.clear();
        fin.seekg(0);
 
        My *arr = new My[N];
 
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        fin.close();
    }
Пытаюсь сделать так:
в файле значения:
1 2 3 4
5 6 7 8
9 1 2 3
5 6 7 8

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
struct My
{int a;
 int b;
 int c;
 int d;
};
int _tmain(int argc, _TCHAR* argv[])
{   ifstream fin("D:\\data.txt");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N;  // N - количество строк (структур) в файле
        fin.clear();
        fin.seekg(0);
 
        My *arr = new My[N];
 
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        fin.close();
    }
    
getch();
return 0;
}
пишет , что 'getline': identifier not found
всё , подключил string

Добавлено через 9 минут
Цитата Сообщение от NNN7 Посмотреть сообщение
Пытаюсь сделать так:
в файле значения:
1 2 3 4
5 6 7 8
9 1 2 3
5 6 7 8

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
struct My
{int a;
 int b;
 int c;
 int d;
};
int _tmain(int argc, _TCHAR* argv[])
{   ifstream fin("D:\\data.txt");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N;  // N - количество строк (структур) в файле
        fin.clear();
        fin.seekg(0);
 
        My *arr = new My[N];
 
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        fin.close();
    }
    
getch();
return 0;
}
пишет , что 'getline': identifier not found
всё , подключил string
я пытаюсь вывести на экран элементы структуры функцией , но не получается
void Show(arr,N)
C++
1
2
3
4
5
6
7
{for(int i=0;i<N;i++)
{cout<<arr[i].a;
 cout<<arr[i].b;
 cout<<arr[i].c;
 cout<<arr[i].d;
 cout<<" ";
}}
пишет , что arr,N без идентификатора
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
12.10.2013, 16:07     Есть файл с данными . Как переписать эти данные в массив структур? #13
C++
1
void show(My* arr, int N);
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 16:11  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #14
Цитата Сообщение от d1skort Посмотреть сообщение
C++
1
void show(My* arr, int N);
а вот когда в мейне уже пишу
C++
1
Show(arr,N);
пишет , что arr без идентификатора
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 16:12     Есть файл с данными . Как переписать эти данные в массив структур? #15
Цитата Сообщение от NNN7 Посмотреть сообщение
а вот когда в мейне уже пишу
Цитата Сообщение от NNN7 Посмотреть сообщение
пишет , что arr,N без идентификатора
Всё делайте в теле этого if:
C++
1
2
if (fin)
{}
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 16:15  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Всё делайте в теле этого if:
C++
1
2
if (fin)
{}
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
using namespace std;
struct My
{int a;
 int b;
 int c;
 int d;
};
void Show(My *arr,int N);
void Show(My *arr,int N)
{for(int i=0;i<N;i++)
{cout<<arr[i].a;
 cout<<arr[i].b;
 cout<<arr[i].c;
 cout<<arr[i].d;
 cout<<" ";
}}
int _tmain(int argc, _TCHAR* argv[])
{   ifstream fin("D:\\data.txt");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N;  // N - количество строк (структур) в файле
        fin.clear();
        fin.seekg(0);
        My *arr = new My[N];
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        Show(arr,N);
        fin.close();
}
getch();
return 0;
}
я запускаю всё это , и абсолютно ничего на экран не выводится
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:09     Есть файл с данными . Как переписать эти данные в массив структур? #17
Цитата Сообщение от NNN7 Посмотреть сообщение
я запускаю всё это , и абсолютно ничего на экран не выводится
А так?
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
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
using namespace std;
struct My
{
    int a;
    int b;
    int c;
    int d;
};
 
void Show(My *arr,int N);
void Show(My *arr,int N)
{
    for(int i=0;i<N;i++)
    {
        cout<<arr[i].a;
        cout<<arr[i].b;
        cout<<arr[i].c;
        cout<<arr[i].d;
        cout<<" ";
    }
}
 
int main()
{   
    ifstream fin("D:\\data.txt");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N;  // N - количество строк (структур) в файле
        fin.clear();
        fin.seekg(0);
        My *arr = new My[N];
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        
        Show(arr,N);
        fin.close();
    }
    else cout << "Error!" << endl;
    
    getch();
    return 0;
}
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 17:18  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #18
Цитата Сообщение от alsav22 Посмотреть сообщение
А так?
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
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
using namespace std;
struct My
{
    int a;
    int b;
    int c;
    int d;
};
 
void Show(My *arr,int N);
void Show(My *arr,int N)
{
    for(int i=0;i<N;i++)
    {
        cout<<arr[i].a;
        cout<<arr[i].b;
        cout<<arr[i].c;
        cout<<arr[i].d;
        cout<<" ";
    }
}
 
int main()
{   
    ifstream fin("D:\\data.txt");
    string str;
    int N = 0;
    if (fin)
    {
        while (getline(fin, str)) ++N;  // N - количество строк (структур) в файле
        fin.clear();
        fin.seekg(0);
        My *arr = new My[N];
        for (int i = 0; i < N; ++i)
        {
            fin >> arr[i].a;
            fin >> arr[i].b;
            fin >> arr[i].c;
            fin >> arr[i].d;
        }
        
        Show(arr,N);
        fin.close();
    }
    else cout << "Error!" << endl;
    
    getch();
    return 0;
}
так выводится Error!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:20     Есть файл с данными . Как переписать эти данные в массив структур? #19
Цитата Сообщение от NNN7 Посмотреть сообщение
так выводится Error!
И как думаете, почему?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 17:21     Есть файл с данными . Как переписать эти данные в массив структур?
Еще ссылки по теме:

C++ Организация работы с данными (входные данные должны вводиться из файла, а выходные выводиться в файл)
Динамический массив структур. Почему данные доступны после выполнения операции delete [] C++
Как записать массив структур в файл C++

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

Или воспользуйтесь поиском по форуму:
NNN7
7 / 7 / 3
Регистрация: 05.09.2013
Сообщений: 503
12.10.2013, 17:21  [ТС]     Есть файл с данными . Как переписать эти данные в массив структур? #20
Цитата Сообщение от alsav22 Посмотреть сообщение
И как думаете, почему?
что-то с открытием файла не так ?
Yandex
Объявления
12.10.2013, 17:21     Есть файл с данными . Как переписать эти данные в массив структур?
Ответ Создать тему
Опции темы

Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru