Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
1

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

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

Author24 — интернет-сервис помощи студентам
Допустим есть файл 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2013, 14:41
Ответы с готовыми решениями:

Создать текстовый файл с исходными данными любой размерности. Из текстового файла переписать числа в массив, типизированный файл. Сделать контрольный
Создать текстовый файл с исходными данными любой размерности. Из текстового файла переписать числа...

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

Как дописать и как переписать файл данными из RichTextBox
Всем доброго времени суток! Есть ричтекстбокс и мне надо дописать в файл данные из его, а иногда...

Дан файл вещественных чисел. Найти произведение его отрицательных компонент. Переписать эти компоненты в новый файл
Дан файл вещественных чисел. Найти произведение его отрицательных компонент. Переписать эти...

53
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:34 21
Author24 — интернет-сервис помощи студентам
Файл не находит.
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 17:43  [ТС] 22
Цитата Сообщение от alsav22 Посмотреть сообщение
Файл не находит.
И что же делать в таком случае? Путь вроде правильно описан.В чём же тогда может быть проблема?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:45 23
Цитата Сообщение от NNN7 Посмотреть сообщение
Путь вроде правильно описан.В чём же тогда может быть проблема?
Может в том, что "вроде бы"?
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 17:47  [ТС] 24
Цитата Сообщение от alsav22 Посмотреть сообщение
Может в том, что "вроде бы"?
Да не может быть , чтобы не правильно . Вот , на диске D , без всякой папки у меня хранится файл data.txt с данными

А Вы не пробовали у себя запустить ?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 17:50 25
Цитата Сообщение от NNN7 Посмотреть сообщение
А Вы не пробовали у себя запустить ?
Пробовал.
Миниатюры
Есть файл с данными . Как переписать эти данные в массив структур?  
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 17:56  [ТС] 26
Цитата Сообщение от alsav22 Посмотреть сообщение
Пробовал.
И как результат ?

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Пробовал.
Так а что я делаю неправильно?

Добавлено через 3 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Пробовал.
у Вас такие значения были в файле?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:21 27
Цитата Сообщение от NNN7 Посмотреть сообщение
у Вас такие значения были в файле?
...
1 2 3 4
5 6 7 8
9 1 2 3
5 6 7 8
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 18:23  [ТС] 28
Цитата Сообщение от alsav22 Посмотреть сообщение
...
так в чём же ошибка открытия файла? помогите мне , пожалуйста
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:29 29
Попробуйте в папку проекта файл поместить, и в коде измените:
C++
1
ifstream fin("data.txt");
Добавлено через 2 минуты
Если не сработает, то название измените на "1.txt", может у вас русская а в названии.
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 18:31  [ТС] 30
Цитата Сообщение от alsav22 Посмотреть сообщение
Попробуйте в папку проекта файл поместить, и в коде измените:
C++
1
ifstream fin("data.txt");
Добавлено через 2 минуты
Если не сработает, название измените на "1.txt", может у вас русская а в названии.
поместил , изменил- всё тоже самое((
и на 1 уже поменял - не хочет (
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:39 31
Цитата Сообщение от NNN7 Посмотреть сообщение
и на 1 уже поменял
Код выложите, который пробуете сейчас.

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

Добавлено через 41 секунду
Среда какая? ОС?
0
9 / 9 / 10
Регистрация: 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 18:54 33
Цитата Сообщение от NNN7 Посмотреть сообщение
Поместил в папку Visual Studio 2008/Projects/Project1/str - вот в папке st и хранятся все данные проекта
Файл с main() там? Раньше программы, где есть работа с файлами, писали?
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 18:59  [ТС] 34
Цитата Сообщение от alsav22 Посмотреть сообщение
Файл с main() там? Раньше программы, где есть работа с файлами, писали?
файл с main() - то есть , файл str c расширением сpp? Да, там .
Да , писал , но не сложные- запись /вывод массивов , тоже через потоки
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:04 35
В начале main() добавьте:
C++
1
ofstream fout("2.txt");
и посмотрите: файл появится в папке проекта.
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 19:10  [ТС] 36
Цитата Сообщение от alsav22 Посмотреть сообщение
В начале main() добавьте:
C++
1
ofstream fout("2.txt");
и посмотрите: файл появится в папке проекта.
ну да , добавился этот файл в папке проекта
но дело это всё равно не поменяло(
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:16 37
Цитата Сообщение от NNN7 Посмотреть сообщение
но дело это всё равно не поменяло(
Это понятно... В него данные из 1.txt перенесите, и название в коде измените на 2.txt, и это уберите ofstream fout("2.txt")
0
9 / 9 / 10
Регистрация: 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2013, 19:19 39
Цитата Сообщение от NNN7 Посмотреть сообщение
Я назвал его 1.txt , а нужно было просто 1!
Про это поподробнее.
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
12.10.2013, 19:30  [ТС] 40
Цитата Сообщение от alsav22 Посмотреть сообщение
Про это поподробнее.
Вот я писал
C++
1
ifstream fin("1.txt");
А файл у меня был назван не 1 , а 1.txt - вот в этом ошибка
тогда нужно было бы писать 1.txt.txt
0
12.10.2013, 19:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2013, 19:30
Помогаю со студенческими работами здесь

Как записать данные из файла в массив структур?
В коде я ввожу данные и их записывает в файл, помогите пожалуйста записать данные из файла в массив...

Как ввести данные в динамический массив структур?
Подскажите пожалуйста, можно ли вводить данные в динамический массив структур c помощью cin &gt;&gt;...

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

Как записать массив структур в файл
Ребят всем привет у меня такой вопрос как мне записать #include &lt;iostream&gt; #include &lt;windows.h&gt;...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru