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

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

Восстановить пароль Регистрация
 
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
12.07.2013, 23:05     Чтение из двух файлов и запись в один #1
Помогите с одной задачей. У меня есть два файла:
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; 
        }
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.07.2013, 23:21     Чтение из двух файлов и запись в один #2
Suares, Можно предварительно загрузить один из файлов в память (например "trans.dat" в std::map).
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
13.07.2013, 07:57  [ТС]     Чтение из двух файлов и запись в один #3
А пример можно, пожалуйста, с std::map.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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; 
   }
}
alsav22
5282 / 4801 / 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);
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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 подошло, если есть.
Yandex
Объявления
13.07.2013, 14:02     Чтение из двух файлов и запись в один
Ответ Создать тему
Опции темы

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