
Сообщение от
poltos-15
помогите как вывести данные из файла в таблицу
Вот тебе пример (из книжки Лаптева "С++ ООП").
Допустим есть текстовый файл tovar.dat с перечнем товаров, в котором одна запись занимает 2 строки: на первой строке - название товара, на второй — количество и цена.
// tovar.dat
Авторучки перьевые
1031 257.50
Авторучки шариковые
2143 6.50
Лампы настольные люминесцентные белые
300 350
Папки для бумаг
10677 12.67
Требуется записать новый файл (summa.dat), в одной строке которого будет 5 полей:
1. Номер по порядку, ширина поля — 3 символа.
2. Название товара — 40 символов»
3. Цена — 7 символов, два знака после запятой.
4. Количество — 6 символов, целое число.
5. Стоимость = количество цена — 12 символов, 2 знака после запятой.
Поля разделяются символом | (вертикальная черта).
Код программы:
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
| #include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{ struct Tovar
{
string name; // наименование товара
unsigned int HowMany; // количество
double Price; // цена
};
Tovar tmp;
ifstream inf("tovar.dat"); // исходный файл
ofstream to ("summa.dat"); // файл-ведомость
int i = 1; double Summa = 0;
// чтение первой записи
getline(inf, tmp.name);
inf >> tmp.HowMany; inf >> tmp.Price; inf.ignore();
while(!inf.eof()) // пока не конец файла
{ to << right << setw(3) << i++ << '|';
to << left << setw(40) << tmp.name.substr(0,40) << '|';
to.precision(2);
to << right << fixed
<< setw(6) << tmp.HowMany << '|'
<< setw(7) << tmp.Price << '|'
<< setw(12) << tmp.Price*tmp.HowMany << '|'
<< endl;
Summa += tmp.Price*tmp.HowMany;
getline(inf, tmp.name);
inf >> tmp.HowMany; inf >> tmp.Price; inf.ignore();
}
to << setw(72) << Summa << endl;
} |
|
Результат:
// summa.dat
1|Авторучки перьевые | 1031| 257.50| 265482.50|
2|Авторучки шариковые | 2143| 6.50| 13929.50|
3|Лампы настольные люми| 300| 350.00| 105000.00|
4|Папки для бумаг | 10677| 12.67| 135277.59|
519689.59
Форматирование summa.dat отобразилось неправильно.