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

Вывод данных из структурированного файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Агрегатор новостей на С++, с чего начать http://www.cyberforum.ru/cpp-beginners/thread831394.html
Здравствуйте. Нужно написать RSS-агрегатор новостей для трех новостных сайтов. Нужно, чтобы было окно с новостями и при нажатии на кнопку "Обновить", новости обновлялись Подскажите хотя-бы в общих чертах, с чего начать писать, или что почитать P.S. C++ знаю :)
C++ Что означает оператор %= ? Что означает оператор %= и как его использовать? http://www.cyberforum.ru/cpp-beginners/thread831353.html
C++ Виртуальная функция
Создайте класс Matematica, определите в нем виртуальную функцию-член matem(int x, int y), которая выводит на экран значения параметров. Создайте производные классы Umn и Del с перегруженной функцией matem(int x, int y) для умножения и деления параметров соответственно.
C++ Работа с массивом. Ввести число x и продублировать каждый элемент массива, превосходящий x
Есть такая задача: введите с клавиатуры число x и продублируйте каждый элемент массива, превосходящий x(т.е. вставьте рядом такой же элемент). Массив считывается из файла. Вот мой незавершенный вариант задачи, собственно затык произошел в написании функции сдвига массива, в сравнении элементов и дублировании. Есть какие мысли по решению задачи? int main() { int *mas; int i,N,x; FILE *in,...
C++ Найти самое длинное и самое короткое слово в тексте http://www.cyberforum.ru/cpp-beginners/thread831331.html
найти самое длинное и самое короткое слово в тексте #include "stdafx.h"endl; #include <iostream> #include <string> #include <vector> using namespace std; string s; getline(cin,s); cout<<"vvod texta/n"<<endl;
C++ Системные флаги диска #include <iostream> #include <stdio.h> #include <windows.h> #include <conio.h> #include <locale> using namespace std; int main() { подробнее

Показать сообщение отдельно
prospector
 Аватар для prospector
7 / 7 / 0
Регистрация: 23.03.2013
Сообщений: 17
08.04.2013, 17:43     Вывод данных из структурированного файла
Цитата Сообщение от 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 отобразилось неправильно.
 
Текущее время: 14:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru