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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
#1

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

12.10.2013, 14:41. Просмотров 1576. Ответов 53
Метки нет (Все метки)

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

Ввести данные в файл, и записать данные с файла в массив структур - C++
Ввести все данные в файл, и записать данные с файла в структуру. Помогите ввести и вывести структуру из файла. Допускается - и желательно...

Как ввести данные в динамический массив структур? - C++
Подскажите пожалуйста, можно ли вводить данные в динамический массив структур c помощью cin >> следующим образом: #include <iostream> ...

Как записать данные из файла в массив структур? - C++
В коде я ввожу данные и их записывает в файл, помогите пожалуйста записать данные из файла в массив структур #include <conio.h> ...

Заполнить массив структур данными с файла - C++
Описать структуру с именем WORKER, содержащую следующие поля: ФИО работника; название занимаемой должности; год поступления на работу....

Как записать массив структур в файл - C++
Ребят всем привет у меня такой вопрос как мне записать #include <iostream> #include <windows.h> #include <iomanip> #include...

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

53
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:39 #31
Цитата Сообщение от NNN7 Посмотреть сообщение
и на 1 уже поменял
Код выложите, который пробуете сейчас.

Добавлено через 29 секунд
Цитата Сообщение от NNN7 Посмотреть сообщение
поместил
Куда?

Добавлено через 41 секунду
Среда какая? ОС?
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 18:45  [ТС] #32
Цитата Сообщение от alsav22 Посмотреть сообщение
Код выложите, который пробуете сейчас.

Добавлено через 29 секунд

Куда?

Добавлено через 41 секунду
Среда какая? ОС?
VS2008 , Windows 7 Профессиональная
Поместил в папку Visual Studio 2008/Projects/Project1/str - вот в папке st и хранятся все данные проекта

Вот код:
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
#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("1.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;
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:54 #33
Цитата Сообщение от NNN7 Посмотреть сообщение
Поместил в папку Visual Studio 2008/Projects/Project1/str - вот в папке st и хранятся все данные проекта
Файл с main() там? Раньше программы, где есть работа с файлами, писали?
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 18:59  [ТС] #34
Цитата Сообщение от alsav22 Посмотреть сообщение
Файл с main() там? Раньше программы, где есть работа с файлами, писали?
файл с main() - то есть , файл str c расширением сpp? Да, там .
Да , писал , но не сложные- запись /вывод массивов , тоже через потоки
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:04 #35
В начале main() добавьте:
C++
1
ofstream fout("2.txt");
и посмотрите: файл появится в папке проекта.
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 19:10  [ТС] #36
Цитата Сообщение от alsav22 Посмотреть сообщение
В начале main() добавьте:
C++
1
ofstream fout("2.txt");
и посмотрите: файл появится в папке проекта.
ну да , добавился этот файл в папке проекта
но дело это всё равно не поменяло(
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:16 #37
Цитата Сообщение от NNN7 Посмотреть сообщение
но дело это всё равно не поменяло(
Это понятно... В него данные из 1.txt перенесите, и название в коде измените на 2.txt, и это уберите ofstream fout("2.txt")
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 19:18  [ТС] #38
Цитата Сообщение от alsav22 Посмотреть сообщение
Это понятно... В него данные из 1.txt перенесите, и название в коде измените на 2.txt, и это уберите ofstream fout("2.txt")
Вот я дурак то! Дело было в названии файла.Я назвал его 1.txt , а нужно было просто 1!
Мне стыдно.Очень.

Прошу Вас , можете ещё раз подробненько рассказать , как происходит считывание с файла , которое Вы написали .
ifstream fin("1.txt");
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 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;
        }
}
N-это у нас получается количество массивов ,но мне не понятно , как именно оно начисляется ?
и зачем нам нужно
C++
1
fin.clear();
можно ли обойтись без него?
И ещё , теперь все операции , которые я хочу делать со структурой - их нужно делать в операторе if(){} ?

Извините за такие вопросы , я , наверное , Вам уже надоел)
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:19 #39
Цитата Сообщение от NNN7 Посмотреть сообщение
Я назвал его 1.txt , а нужно было просто 1!
Про это поподробнее.
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 19:30  [ТС] #40
Цитата Сообщение от alsav22 Посмотреть сообщение
Про это поподробнее.
Вот я писал
C++
1
ifstream fin("1.txt");
А файл у меня был назван не 1 , а 1.txt - вот в этом ошибка
тогда нужно было бы писать 1.txt.txt
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:59 #41
Цитата Сообщение от NNN7 Посмотреть сообщение
А файл у меня был назван не 1 , а 1.txt - вот в этом ошибка
Тогда как это понять?
Цитата Сообщение от NNN7 Посмотреть сообщение
Вот , на диске D , без всякой папки у меня хранится файл data.txt с данными
Какой файл у вас был на D: data.txt или data.txt.txt ?
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 20:45  [ТС] #42
Цитата Сообщение от alsav22 Посмотреть сообщение
Тогда как это понять?

Какой файл у вас был на D: data.txt или data.txt.txt ?
название он имел data.txt
это я просто дурак.
пожалуйста , можете ещё разок разъяснить , как происходит чтение из файла?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 20:57 #43
Цитата Сообщение от NNN7 Посмотреть сообщение
название он имел data.txt
Вы под названием файла, что понимаете? То что до расширения? Или у вас расширения файлов не видны?
0
NNN7
8 / 8 / 3
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 21:00  [ТС] #44
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы под названием файла, что понимаете? То что до расширения? Или у вас расширения файлов не видны?
то что до расширения
я создаю текстовый файл и даю ему сразу имя
вот я и дал при создании ему имя 1.txt , а подумал , что это у меня расширение
а расширение получается автоматически создаётся , так как я выбрал- создать "текстовый файл"
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 21:36 #45
Цитата Сообщение от NNN7 Посмотреть сообщение
Прошу Вас , можете ещё раз подробненько рассказать , как происходит считывание с файла , которое Вы написали:
ifstream fin("1.txt");
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;
}
}
N-это у нас получается количество массивов ,но мне не понятно , как именно оно начисляется ?
и зачем нам нужно:
C++
1
fin.clear();
можно ли обойтись без него?
И ещё , теперь все операции , которые я хочу делать со структурой - их нужно делать в операторе if(){} ?
1) "N-это у нас получается количество массивов ,но мне не понятно , как именно оно начисляется ?"

getline() читает строку, счётчик N, после прочтения каждой строки, увеличивается. Сколько строк - столько структур.

2) "и зачем нам нужно:
C++
1
fin.clear();
можно ли обойтись без него?"

Когда чтение строк в файл доходит до конца файла, то устанавливается флаг eof, если его не сбросить (fin.clear()), то поток будет нерабочим, и никакие действия с ним не буду выполняться.

3) "И ещё , теперь все операции , которые я хочу делать со структурой - их нужно делать в операторе if(){}" ?

Если файл не открылся, занчит данные в массив не будут считаны. Что в таком случае можно "делать со структурой"?
1
12.10.2013, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2013, 21:36
Привет! Вот еще темы с ответами:

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

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

Переписать с первого файла данные во второй файл, но по критериям - C++
Здравствуйте ещё раз. Помогите, пожалуйста, с самым сложным. Я написал в файл текст с цифрами. Например: My name is Peter. I`am 15 years...

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


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

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

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