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

Чтение файла в структуру - C++

Восстановить пароль Регистрация
 
Slava_
4 / 4 / 1
Регистрация: 27.02.2013
Сообщений: 91
16.05.2013, 09:42     Чтение файла в структуру #1
Здравствуйте, не получается прочитать файл и компоненты записать в структуру.
Допустим, содержание файла:
C
1
2
3
4
5
6
7
4
6
Text1
2
Text2
Text3
Text4
И структура:
C
1
2
3
4
5
6
7
8
struct st
{
int value;
int value2;
char* text;
int value3;
char* string[3];
} my_str[5];
Т.е., значения должны вот так записываться:
C
1
2
3
4
5
6
7
4 - value
6 - value2
Text1 - text
2 - value3
Text2 - string[0]
Text3 - string[1]
Text4 - string[2]
Покажите пример, как записать..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
16.05.2013, 10:34     Чтение файла в структуру #2
Это зависит от задания. В нём обычно указывается, в каком порядке и каким образом в файле записаны поля структуры, да и надо знать, что за структура. Исходя из него, уже можно определить, как считывать информацию.

Если надо самому написать запись в файл и чтение потом, то тут можно как угодно, лишь бы работало.
В вашем случае я б как-нибудь так написал:
C++
1
2
3
4
5
6
7
8
...
ifstream F;
st A; // Ваша структура
F.open("файл_откуда_читаем", ios::in);
F >> A.value >> A.value2;
fgets(A.text, 255, F);
F >> A.value3;
// и т.д.
Flassie
181 / 166 / 29
Регистрация: 03.08.2012
Сообщений: 591
Завершенные тесты: 2
16.05.2013, 10:41     Чтение файла в структуру #3
C++
1
2
3
ifstream in("input.txt");
s a; // Структура
in >> a.value1 >> a.value2 >> a.text >> a.value3 >> a.text1 >> a.string[0] >> a.string[1] >> a.string[2];
Библиотека fstream
Slava_
4 / 4 / 1
Регистрация: 27.02.2013
Сообщений: 91
16.05.2013, 10:43  [ТС]     Чтение файла в структуру #4
Asker, Да это не задание, я для себя)
И еще небольшая ошибочка: вместо fgets, в вашем примере, надо использовать getline.



Вот если считать строку напрямую в структуру, как я делаю:
C
1
f >> my_str[0].text;
программа крашится.
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
16.05.2013, 10:55     Чтение файла в структуру #5
Цитата Сообщение от Slava_ Посмотреть сообщение
Asker, Да это не задание, я для себя)
И еще небольшая ошибочка: вместо fgets, в вашем примере, надо использовать getline.
getline записывает в строку string
А у Вас там строка представлена массивом char
Slava_
4 / 4 / 1
Регистрация: 27.02.2013
Сообщений: 91
16.05.2013, 11:03  [ТС]     Чтение файла в структуру #6
Цитата Сообщение от Asker Посмотреть сообщение
getline записывает в строку string
А у Вас там строка представлена массивом char
По-моему, нет:
Чтение файла в структуру
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
16.05.2013, 11:40     Чтение файла в структуру #7
Я знаю, что getline() работает с массивом символов. Вы меня неправильно поняли.
Просто у Вас написано
C++
1
char* string[3];
-это массив из указателей на строки, или я не прав?
Указатели неинициализированы, если написать
C++
1
F.getline(my_str.string[0], 50);
у меня лично вылетает Runtime-error. Вот если б вы написали char string[3][50]; к примеру, так работает

Если я ошибаюсь - поправьте меня, буду благодарен!
Slava_
4 / 4 / 1
Регистрация: 27.02.2013
Сообщений: 91
16.05.2013, 13:08  [ТС]     Чтение файла в структуру #8
Спасибо, работает

Eще вопросик: Допустим, чтобы обнулить такой массив, обязательно ли использовать memset?
И чтобы присвоить какoе-нибудь значение, обязательно ли использовать strcpy?
C
1
2
3
4
5
my_str[0].text = "\0";//Так не выйдет
memset(my_str[0].text, 0, 20);//Вот так работает
 
my_str[0].text = name;////Так не выйдет
strcpy(my_str[0].text, name);//Вот так будет работать
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
16.05.2013, 13:43     Чтение файла в структуру #9
Цитата Сообщение от Slava_ Посмотреть сообщение
И чтобы присвоить какoе-нибудь значение, обязательно ли использовать strcpy?
В Си операция присваивания одной строки другой (в виде char*) не определена. только так (или можно запилить поэлементное копирование, но кому это надо?)

Цитата Сообщение от Slava_ Посмотреть сообщение
Допустим, чтобы обнулить такой массив, обязательно ли использовать memset?
А чем Вам memset не нравится? имхо, нормально работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2013, 14:03     Чтение файла в структуру
Еще ссылки по теме:

Чтение файла в структуру C++
Чтение из файла в список (двунаправленный), используя структуру C++
C++ Построчное чтение из файла в структуру

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.05.2013, 14:03     Чтение файла в структуру #10
Цитата Сообщение от Asker Посмотреть сообщение
В Си операция присваивания одной строки другой (в виде char*) не определена.
Если не изменять строку (и первоисточник не будет удален до использования), то просто скопируется указатель. Можно смело использовать такую строку.
Yandex
Объявления
16.05.2013, 14:03     Чтение файла в структуру
Ответ Создать тему
Опции темы

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