Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106

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

12.07.2013, 23:05. Показов 1729. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2013, 23:05
Ответы с готовыми решениями:

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

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

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

5
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
12.07.2013, 23:21
Suares, Можно предварительно загрузить один из файлов в память (например "trans.dat" в std::map).
0
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
13.07.2013, 07:57  [ТС]
А пример можно, пожалуйста, с std::map.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
13.07.2013, 13:34
Примерно так:
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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.07.2013, 13:55
Цитата Сообщение от 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
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
13.07.2013, 14:02
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2013, 14:02
Помогаю со студенческими работами здесь

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

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

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

Чтение запись файлов
нужно из файла f записать 20 символов в файл fp, сделать отступ и повторять пока не закончится файл и объясните, можно ли на с++ записать...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru