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

Переставить во входном бинарном файле пары блоков

27.02.2021, 19:24. Показов 1256. Ответов 4

Author24 — интернет-сервис помощи студентам
Не получается правильно сделать обработку. Задание: переставить местами первый блок со вторым, третий с четвертым и тд( программа универсальная, тк не известно к-во блоков в файле). Написала так, переставляются только первые две пары, а вторая уже измененная просто дублируется до конца. Помогите исправить

Вот код обработки:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int elem = sizeof(array) / sizeof(array[0]);
fstream inout(file_name, ios::binary | ios::in | ios::out); // відкрити файловий поток для читання та запису у бінарному режимі
    for(int i = 0; i < size; i++ )
    {
        pos_first = inout.tellg();  //save position of first
        inout.read((char*)(&first), size_of_record);    //read first record, set to second record
        inout.read((char*)(&second), size_of_record);   //read second record, set to first record
 
        if (!inout) {
            break;
        }
 
        inout.seekp(pos_first);
        inout.write((char*)(&second), size_of_record);
        inout.write((char*)(&first), size_of_record);
        --elem;
    }
    inout.close();
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2021, 19:24
Ответы с готовыми решениями:

Удвоить все пробелы во входном файле, в конце дописать строку «Количество пробелов во входном файле: х»
У меня есть вот такой код, только в этом коде с файла in в out переносится ввесть текст и пробелы...

Найти в бинарном файле все пары точек, лежащих с точкой d на одной прямой
В файле заданы множество точек А и точка d вне его. Найти все пары точек, лежащих с точкой d на...

В заданном бинарном файле переставить местами элементы с максимальным и минимальным значениями
Задание Написать программу для обработки данных, хранящихся в бинарных файлах согласно...

Файл: В выходной файл вывесте все искомые пары в том порядке, в котором они шли во входном файле...
Процедуры. Задача 1 Составить подпрограмму, которая для двух чисел вычисляет их сумму и...

4
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
28.02.2021, 02:39 2
Лучший ответ Сообщение было отмечено Anastasia_Galax как решение

Решение

Anastasia_Galax, так работает:
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
38
39
40
#include <iostream>
#include <fstream>
 
using namespace std;
 
const size_t size_of_record = 2;
 
const char *file_name = "testfile.txt";
 
int main()
{
    char first[size_of_record], second[size_of_record];
 
    int elem = 100;
    fstream inout(file_name, ios::binary | ios::in | ios::out);
 
    streampos pos_read = inout.tellg();
    streampos pos_write = inout.tellp();
    for (int i = 0; true; i++)
    {
        inout.seekg(pos_read);
        inout.read((char *)(&first), size_of_record);
        inout.read((char *)(&second), size_of_record);
        pos_read = inout.tellg();
 
        if (!inout) {
            break;
        }
 
        inout.seekp(pos_write);
        inout.write((char *)(&second), size_of_record);
        inout.write((char *)(&first), size_of_record);
        pos_write = inout.tellp();
 
        --elem;
    }
    inout.close();
 
    cout << "elem = " << elem << endl;
}
1
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
01.03.2021, 23:41  [ТС] 3
Господи, спасибо огромное, все заработало!!!!

Добавлено через 1 минуту
streampos pos_read = inout.tellg();
streampos pos_write = inout.tellp();
А можете только объяснить для чего это?
0
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
02.03.2021, 15:46 4
Anastasia_Galax, это получение позиции файлового указателя чтения и записи соответетвенно.
C++
1
2
3
4
        inout.seekg(pos_read);         // отпозиционировались на место последнего чтения
        inout.read((char *)(&first), size_of_record);        // читаем в первый и второй буферы
        inout.read((char *)(&second), size_of_record);
        pos_read = inout.tellg();     // запомнили место, откуда читать дальше
С записью - аналогично.
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
02.03.2021, 23:15  [ТС] 5
О, все поняла теперь, спасибо еще раз!
0
02.03.2021, 23:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2021, 23:15
Помогаю со студенческими работами здесь

Поиск анаграмм во входном файле
Условие. В заданном алфавите слов найти все анаграммы. Входные данные. Есть файл &quot;input.txt&quot; в...

Русский язык в входном файле
Как сделать так, чтобы во входном файле после компиляции язык оставался русским и во входной файл...

Если во входном файле 69, то в выходной выводит f(66)
если в file.in записано 69 то в file.out записывается f с номером 66, скажите в чём может быть...

RESOURCE_LIMIT - Во входном файле недопустимый символ 0
С помощью команды show parameter pfile посмотрел имя файл инициализационных параметров. Хотел...

Во входном файле записано сначала число N
Во входном файле записано сначала число N(1&lt;=N&lt;=100),a затем N моментов времен.Каждый момент...

Во входном файле подсчитать количество символов
Здраствуйте, подскажите пожалуйста как в си во входном файле подсчитать количество символов


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru