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

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

Войти
Регистрация
Восстановить пароль
 
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
#1

Построчное чтение из файла в структуру - C++

20.05.2015, 16:07. Просмотров 756. Ответов 8
Метки нет (Все метки)

Всем доброго дня!

Есть структура вида

C++
1
2
3
4
5
6
7
struct Product
{
    char code[100];
    char name[100];
    double price;
    double quantity;
};
и файл, в котором каждая строка является ячейкой данных поочередно.

Необходимо прочитать файл и поместить данные в массив структуры. Осуществить пытаюсь так:

C++
1
2
3
4
5
6
7
8
9
10
11
Product *mas = new Product;
ifstream db ("db.txt");
if (db.is_open())
{
        while (! db.eof() )
        {  
          mas[c].code = getline(db,line);
          c++;
        }
        db.close();
}
Однако ругается на mas[c].code - expression must be a modifiable lvalue

Не могу понять в чем проблема.
Может быть есть более удобные решения?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2015, 16:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построчное чтение из файла в структуру (C++):

Построчное чтение файла - C++
Например есть структура struct Record { char * Name; char * LastName; int Age; }; и есть текстовый файл, например: ...

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

Построчное чтение из файла - C++
Помогите написать программу которая считывает из файла такой структуры; 1 строка 5 7 2 строка ...

Построчное чтение из файла - C++
такая проблема есть фаил в нем записана информация: 10 Петров А.Л. Сон 1991 4 51 Сидоров В.О. Луна 1970 5 ....... мне нужно считать...

Построчное чтение из файла - C++
Вечер добрый! С с++ только знакомлюсь. Нужно обработать файл. Построчно считываю данные, и обрабатываю их. Но вот ведь какая...

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

8
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
20.05.2015, 17:11 #2
Цитата Сообщение от valeryp Посмотреть сообщение
mas[c].code = getline(db,line);
mas не массив, поэтому какой может быть индекс?
getline возвращает поток, поэтому (line - string?):
C++
1
2
getline(db,line);
strcpy(mas.code, line.c_str());
0
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.05.2015, 17:13 #3
C++
1
Product *mas = new Product[MAX_INT-1];
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
20.05.2015, 17:16 #4
Или:
C++
1
db.getline(mas.code, 100);
0
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
20.05.2015, 17:24  [ТС] #5
Действительно, я довольно таки запутался.

Задача стоит такая: в файле записаны продукты в хаотичном порядке, задача отсортировать их скажем по цене.
Идея была такая: получить массив состоящий из n количества структуры Product всех продуктов, потом сортировать массив, выводить.
Может быть можно осуществить как то иначе? Как бы вы посоветовали?

C++
1
db.getline(mas.code, 100);
или

C++
1
2
getline(db,line);
strcpy(mas.code, line.c_str());
подчеркивает mas.code - expression must have class type.
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
20.05.2015, 17:45 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от valeryp Посмотреть сообщение
подчеркивает mas.code - expression must have class type.
Правильно подчёркивает, mas же указатель. Значит так:
C++
1
mas ->code
Но по задаче нужен массив. Чтобы не выделять лишнюю память, можно посчитать сруктуры в файле, потом выделить нужную память.

Добавлено через 3 минуты
В файле, в каждой строке записано одно поле структруы? Значит, посчитать строки, разделить на 4.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
    int c = 0;
    while (db.ignore(256, '\n'))
        ++c;
    Product *mas = new Product[c / 4];
    db.clear();
    db.seekg(0);
Добавлено через 5 минут
Потом:
C++
1
2
3
4
5
6
7
8
9
    for (int i = 0; i < c / 4; ++i)
    {
        db.getline(mas[i].code, 100);
        db.getline(mas[i].name, 100);
        db >> mas[i].price;
        db >> mas[i].quantity;
        db.get();
        
    }
1
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
21.05.2015, 21:13  [ТС] #7
Большое спасибо за ответ, это то к чему я хотел прийти.

C++
1
2
3
4
5
db.getline(mas[i].code, 100);
            db.getline(mas[i].name, 100);
            db >> mas[i].price;
            db >> mas[i].quantity;
            db.get();
Пока не очень понятно зачем нужен db.get() . Может Вы можете подсказать где про это можно почитать?

И ещё, я так понимаю что тут:

C++
1
db.getline(mas[i].name, 100);
в переменную записывается строка,

а в
C++
1
db >> mas[i].price;
записывается напрямую численное значение из потока. Почему так сделать нельзя с name и code?
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
21.05.2015, 21:18 #8
Цитата Сообщение от valeryp Посмотреть сообщение
Пока не очень понятно зачем нужен db.get()
Перед getline() нужно '\n' извлекать.
Цитата Сообщение от valeryp Посмотреть сообщение
Почему так сделать нельзя с name и code?
Можно, если name и code состоят из одного слова. geline() я просто взял из твоего кода.
0
valeryp
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 9
21.05.2015, 21:38  [ТС] #9
Теперь всё ясно, спасибо!
0
21.05.2015, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2015, 21:38
Привет! Вот еще темы с ответами:

Построчное чтение файла в C++ Builder 6 - C++
Есть кусок кода консольного приложения, слова заносим в массив строк (писал в Dev C++) ifstream w(&quot;words.txt&quot;); string wordBase; ...

Построчное чтение из текстового файла - C++
Подскажите плз, как считать не только первую строку, но и все последующие в файле? #include &lt;string.h&gt; #include &lt;stdio.h&gt; int...

Построчное чтение файла в стиле С++ - C++
Господа, передо мной стоит задача реализовать чтение из файла в стиле С++. Реализованно следующим способом: fstream f; ...

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


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

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

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