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

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

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

Чтение из двух файлов и запись в один - C++

12.07.2013, 23:05. Просмотров 766. Ответов 5
Метки нет (Все метки)

Помогите с одной задачей. У меня есть два файла:
1. "oldmast.dat" в котором 4 поля: номер счета клиента, фимилия, имя и баланс;
2. "trans.dat" где 2 поля: номер счета клиента и вносимая сумма;
И есть еще один пустой файл, который должен записать следующее, если номер счета совпадает в 1 файле и во 2 файла, то я должен их суммировать и записать в "newmast.dat"... Остальные случаи пока не рассматриваю.
У меня получается что программа берет только первую запись из "oldmast.dat" и сравнивает ее со всеми записями в "trans.dat", а на вторую строку не переходит в "oldmast.dat"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    std::ifstream old_report("oldmast.dat");
    std::ifstream transaction("trans.dat");
    std::ofstream new_report("newmast.dat", std::ios::app);
 
    if( old_report.fail( ) || transaction.fail( ) )
    {
        std::cerr << "This file cann't open by PC" << std::endl;
        exit(1);
    }
 
    clientData client;
    transData trans;
 
    while( old_report >> client.accountNum >> client.surname >> client.name >> client.balance )
    {
        while( transaction >> trans.accountNum >> trans.balance )
        {
            if(client.accountNum == trans.accountNum)
                new_report << client.accountNum << '\t' << client.surname << '\t' << client.name << '\t' <<    (client.balance + trans.balance) << std::endl; 
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2013, 23:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение из двух файлов и запись в один (C++):

Чтение из двух файлов и запись в третий - C++
Имеется следующая задача: в цикле подсчитывается определенное значение функции fe, зависящее от одного параметра(вводится) и записывается в...

Чтение чисел из двух и более файлов и запись в векторы - C++
В общем моя задача такова: Есть 2 и более файла, каждый из которых наполнен столбцом чисел. Мне нужно прочесть числа из каждого файла и...

Чтение и запись в один и тот же файл с CreateFile - C++
Добрый день. необходимо, чтобы можно было открыть файл, произвести из него чтение, и в процессе считывания при необходимости вносить...

чтение/запись файлов - C++
Здравствуйте, подскажите, пожалуйста, как решить проблему: Имеется массив типа BYTE, необходимо записать его КАК файл Microsoft Word,а...

Запись и чтение файлов - C++
Есть задача, имеются бинарные файл А и В, в А первые 10 чисел положительные, другие 10 отрицательные. Записать в В первые 5 положительных и...

Чтение\запись файлов - C++
Помогите с такой проблемой: записываю в бинарный файл числа типа long double, после чтения из файла теряются данные - к примеру вместо 12...

5
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
12.07.2013, 23:21 #2
Suares, Можно предварительно загрузить один из файлов в память (например "trans.dat" в std::map).
0
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
13.07.2013, 07:57  [ТС] #3
А пример можно, пожалуйста, с std::map.
0
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
13.07.2013, 13:34 #4
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef std::map<std::string, double> transaction_map_t;
 
transaction_map_t transactionMap;
for (transData trans; transaction >> trans.accountNum >> trans.balance; ) {
   transactionMap.insert(std::make_pair(trans.accountNum, trans.balance));
}
 
// ...
 
while( old_report >> client.accountNum >> client.surname >> client.name >> client.balance ) {
   transaction_map_t::const_iterator pos const = transactionMap.find(client.accountNum);
   if (pos != transactionMap.end()) {
      new_report << client.accountNum << '\t' << client.surname << '\t' << client.name << '\t' <<    (client.balance + trans.balance) << std::endl; 
   }
}
1
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.07.2013, 13:55 #5
Цитата Сообщение от Suares Посмотреть сообщение
У меня получается что программа берет только первую запись из "oldmast.dat" и сравнивает ее со всеми записями в "trans.dat", а на вторую строку не переходит в "oldmast.dat"
Должна переходить. Вот во второй файл не зайдёт пока флаги не сбросите и курсор в начало не поставите:
C++
1
2
3
4
5
6
7
8
9
10
while( old_report >> client.accountNum >> client.surname >> client.name >> client.balance )
{
     while( transaction >> trans.accountNum >> trans.balance )
     {
         if(client.accountNum == trans.accountNum)
             new_report << client.accountNum << '\t' << client.surname << '\t' << client.name << '\t' <<    (client.balance + trans.balance) << std::endl; 
     }
     transaction.clear();
     transaction.seekg(0, ios::beg);
}
1
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
13.07.2013, 14:02 #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Примерно так:
Там только вывод так:
C++
1
new_report << client.accountNum << '\t' << client.surname << '\t' << client.name << '\t' <<    (client.balance + it->second) << std::endl;
Добавлено через 1 минуту
Вообще лучше бы unordered_map подошло, если есть.
0
13.07.2013, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 14:02
Привет! Вот еще темы с ответами:

Запись и чтение объектов разных классов в один файл - C++
Здравствуйте. Изучаю С++ по Лафоре. Дошёл до места, где объясняется, как записывать объекты разных классов в один бинарник. У Лафоре,...

Запись и чтение двоичных файлов - C++
Здравствуйте! Как производится запись в двоичные файлы? Нормальных гайдов я не нагуглил. Пробовал так, но не получается.fstream...

Быстрое чтение и запись файлов - C++
Вопрос такой: имеется файл input.txt следующего вида: 5 12 6 7 44 2 1 2 3 4 5 2 343 634 54 1 123 2 345 56 56 11111 2222...

Чтение/запись двоичных файлов - C++
задача,если упрощенно, записать в новый двоичный файл данные исходного файла в блоках по ,допустим, 20 байт. брал целочисленный массив...


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

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

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