|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
||||||
В новый бинарный файл записать первые 3 строки и последние 218.03.2021, 17:08. Показов 4387. Ответов 12
Здравствуйте, выпало задание поработать с вводом и выводом в бинарный файл методами С++. Под видом входных данных есть инициализированная структура на 9 элементов, мне необходимо записать эти 9 элементов в бинарный файл, а затем перенести в новый файл первые три и последние две строки из готового файла. До этого никогда не работал с бинарными файлами и, возможно, вообще не правильно это делаю.
Краткое формулирование задания: Вписать в бинарный файл структуру из 9 элементов, затем из этого файла в новый файл записать первые 3 строки и последние 2 Буду благодарен, если объсните, как работать с бинарными файлами и доставать определенную строку из файла
0
|
||||||
| 18.03.2021, 17:08 | |
|
Ответы с готовыми решениями:
12
Дан бинарный файл F, с помощью цикла записать его содержимое в новый файл g наоборот Записать в новый файл первые N слов исходного файла |
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
|
|
| 18.03.2021, 18:13 | |
|
Dsyder, о каких строках идет речь? В бинарных файлах нет никаких строк
0
|
|
|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
|||||||
| 18.03.2021, 19:27 [ТС] | |||||||
|
Добавлено через 1 час 2 минуты Немного изучил материал, вроде как освоил вывод структуры в бинарный файл, но как содержание файла переписать в другой файл. И еще, при открытии в notepade вижу много NULL, что не так? Вот текущий код:
0
|
|||||||
|
фрилансер
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,100
|
||||||||
| 18.03.2021, 19:35 | ||||||||
|
Добавлено через 1 минуту или уж тогда так
но всё это всё равно не будет работать ))
0
|
||||||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
|
||||||||||||||||
| 18.03.2021, 19:40 | ||||||||||||||||
|
Dsyder, первое что нужно понять - это то, что в бинарном файле данные лежат ворохом байт, потому чтобы после записи данных можно было их корректно прочитать нужно продумать формат хранения данных в бинарном файле, у Вас задача дополнительно осложнена тем, что в Вашей структуре присутствует поле переменной длинны типа string, то есть размеры структур будут не одинаковыми, хотя это поле
string flight::type содержит тип рейса их можно определить заранее например типом char: символ 'p' - passenger (пассажирский), 'c' - cargo (грузовой) - а в программе уже интерпретировать по необходимости. Тогда структура приобретет вид
Также легко будет узнать сколько структур записано в файле, для этого всего-то нужно переместить указатель чтения файла в конец и разделить позицию указателя на sizeof(flight), а чтобы перейти в файле к структуре под номером n нужно переместить указатель чтения файла на позицию n * sizeof(flight). В общем, думаю, идея понятна.
1
|
||||||||||||||||
|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
|
| 18.03.2021, 19:49 [ТС] | |
|
Annemesski, спасибо больше, дальше попытаюсь сам вывести нужные элементы в новый файл. Теперь стало ясно, почему говорили не использовать string в структуре, а по поводу уточнений - не моя прихоть
0
|
|
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
|
|||||||
| 18.03.2021, 20:06 | |||||||
0
|
|||||||
|
фрилансер
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,100
|
||
| 18.03.2021, 20:17 | ||
sizeof(flight) будет таить сюрпризы. И не только оно
1
|
||
|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
||||||
| 18.03.2021, 22:17 [ТС] | ||||||
|
Мдам-с, думал сделаю минут за 15, а тут задача затянулась на весь день и до сих пор не могу разобраться. Добавил по совету функцию показа структур с оформлением и убрал весь текст из записи в бинарный файл. В бинарном теперь только инфа структуры по строкам лежит. Вопрос, как дальше их обрабатывать? Можно ли вытащить из бинарного файла строку по индексу? Вот код на данный момент:
0
|
||||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
|
|||||||||||||||||
| 18.03.2021, 23:16 | |||||||||||||||||
Сообщение было отмечено Dsyder как решение
Решение
Функцию вывода лучше написать для вывода одной структуры, тем более что в примере дальше нам понадобится вывести только одну структуру
0
|
|||||||||||||||||
|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
||||||
| 19.03.2021, 01:09 [ТС] | ||||||
|
Annemesski, спасибо большое, благодаря вашим усилиям получился вот такой код, который необходим по условию задания. Он выводит первые три и последние два элемента структуры из бинарного файла, но еще остался вопрос по поводу этих файлов. Скриншот прикрепляю. Как я понимаю, NULL в бинарном файле появляется из-за неправильной работы с памятью, можете подсказать, где ошибка? И еще небольшой вопрос, можно ли для последнего цикла как-то узнать кол-во элементов в структуре? Вот такой код получился с вашей помощью:
1
|
||||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
|
|
| 19.03.2021, 08:15 | |
|
Dsyder, как я уже говорил выше: бинарный файл это ворох байт, допустим есть у Вас число 4095 записанное в переменную типа int, тип int - это 4 байта, а число 4095 в двоичном виде выглядит так (точками отделены байты): 00000000.00000000.00011111.11111111, то есть в памяти компьютера число 4095 представлено как последовательность из четырех байт в которых от младших к старшим записано:
самый младший байт (нулевой): 111111112 = 25510 следующий байт (первый): 000111112 = 3110 второй байт: 000000002 = 010 третий (самый старший байт: 000000002 = 010 в файл пишутся байты этого числа - от младших к старшим, то есть будет такая последовательность 11111111.11111000.00000000.00000000, если теперь открыть файл текстовым редактором, то он попытается интерпретировать эту последовательность байт как последовательность символов с кодами 255 31 0 0 - как редактор их покажет зависит от кодировки, если вы открываете не виндовым блокнотом, а чем-то более серьезным, например notepad++ он покажет что-то вроде [EoM]∆[Nul][Nul] (в квадратных скобках выделены спецсимволы), в шестнадцатеричном виде он покажет: FF 1F 00 00 в общем, повторю еще раз: бинарный файл - это последовательность байт, открывать такие файлы в текстовом редакторе и искать в показанных символах какой-то смысл - бесполезное занятие. Откройте любой другой бинарный файл, например скомпилированный exe-шник этой Вашей программы и Вы увидите похожую картину. Это я все к чему? Все у Вас в файле нормально - бинарные файлы так и выглядят - никаких ошибок и "неправильной работы с памятью" тут нет. По поводу количества элементов в структуре не понял что Вы хотите получить. В массиве trip[] у Вас лежат структуры flight в количестве tripsCount, в переменной flt_n одна структура типа flight скопированная из файла по номеру j от начала файла, то есть какая именно структура лежит в flt_n зависит от итерации цикла, а именно от текущего значения счетчика.
1
|
|
|
2 / 2 / 0
Регистрация: 19.11.2020
Сообщений: 45
|
|
| 19.03.2021, 10:05 [ТС] | |
|
Annemesski, по поводу бинарного файла - спасибо за разъяснение, очень полезная информация. А по поводу того, что хочу получить - из структуры trip нужно достать первые 3 и последние 2 элемента. Вчера ночью доделывать код и не заметил, что вы написали как узнать кол-во элементов, теперь буду от этого в цикле отталкиваться. По сути - все, огромное еще раз спасибо за помощь в задании
0
|
|
| 19.03.2021, 10:05 | |
|
Помогаю со студенческими работами здесь
13
Суммы первых и последних элементов каждого массива записать в новый бинарный файл Записать в новый бинарный файл F2 все числа файла F1, которые встречаются один раз Дан бинарный файл, вывести целые числа из файла и записать числа в новый файл возведя в степень Записать в новый текстовый файл первые четыре отрицательных элемента исходного и их сумму Текстовый файл состоит из нескольких строк. Записать во второй файл последние символы из каждой строки первого файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|