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

Управление двоичными файлами с записями фиксированной длины.Разбиаение записи на команды

19.10.2022, 23:28. Показов 1960. Ответов 23

Студворк — интернет-сервис помощи студентам
Имеется задача. Честно говоря, не знаю как подступиться ни с точки зрения кода ни алгоритмически. Очень плохо даётся всё связанное с двоичными файлами, да и в принципе по работе с файлами (Крайне буду благодарен литературе по работе с файлами и не только на с++)

Нужно программу управления двоичными файлами с записями фиксированной длины

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

Сама задача: Книга: ISBN – двенадцатизначное число, автор, название, год издания.

Требования к подготовке и выполнению задания
1) Разработать структуру записи двоичного файла согласно варианту задания.
2) Подготовить тестовые данные в текстовом файле с кодировкой ASCII, в соответствии со структурой записи варианта.
3) При открытии файла выполнить контроль его существования и открытия.

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

Проблема в том, что неясно как вообще алгоритмически это сделать. Вроде как тут нужно двойное хэширование, но тогда вопрос встает в реализации. Прошу совета в алгоритме или коде или любая другая инфа по данной теме. Кто чем может
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2022, 23:28
Ответы с готовыми решениями:

Создать текстовый файл с записями фиксированной длины.
Создать текстовый файл с записями фиксированной длины. Файл содержит информацию о стоимости 10 наименований товаров в различных...

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

Строку произвольной длины разрезать на несколько строк фиксированной длины
Есть строка большой длины (до 2000 символов) - последние символы в строке ~^, нужно разделить эту строку на несколько строк не более 200...

23
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
19.10.2022, 23:41
Хеширование тройное минимум, иначе незачет.

Где в задании про двоичные файлы вообще?

Цитата Сообщение от daniil_novel Посмотреть сообщение
Нужно программу управления двоичными файлами с записями фиксированной длины
Примерчик бы какой-то из конспекта или методички, что под этим подразумевается.

Кстати, а что препод говорит и соучастники сокурсники? Может у них идейки спросить? задача-то у всех одинаковая. Вместе и состряпать.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 00:06  [ТС]
Да пробовали. Препод вообще ничего не говорит. С этим туго. А однокурсники также над этим две недели бьются. Сейчас попробую найти тот код, который написали все вместе на данный момент. А методички и вовсе нет. Было сказано смотреть ютуб и набираться знаний от бесконечного простора вселенной. Поэтому я и здесь)))

Главное, самому интересно, а как подступиться непонятно (
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 00:10
Цитата Сообщение от daniil_novel Посмотреть сообщение
Вроде как тут нужно двойное хэширование
Откуда такая мысль ?

Добавлено через 1 минуту
Цитата Сообщение от daniil_novel Посмотреть сообщение
Нужно программу управления двоичными файлами с записями фиксированной длины
Цитата Сообщение от daniil_novel Посмотреть сообщение
Примечание. Реализация операций по чтению данных из файла будет проще, если значение для каждого поля записи размещать на отдельной строке текстового редактора.
Какое-то противоречие.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 00:16  [ТС]
Мысль была выработана путем долгих и видимо фиговых размышлений
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 00:22
Цитата Сообщение от daniil_novel Посмотреть сообщение
Проблема в том, что неясно как вообще алгоритмически это сделать.
Раз дана свобода, гуляем.
daniil_novel,
C++
1
2
3
4
5
6
struct Book{
   char isbn[12];
   char author[33];
   char name[33];
   uint16_t  year;
};
Какие еще вопросы ?

Добавлено через 1 минуту
Я без понятия что там за ключи для записей, и на какой они там нужны.
Найдете ответ, укажу как их добавить.

Добавлено через 3 минуты
Цитата Сообщение от daniil_novel Посмотреть сообщение
2) Подготовить тестовые данные в текстовом файле с кодировкой ASCII, в соответствии со структурой записи варианта.
Цитата Сообщение от daniil_novel Посмотреть сообщение
Примечание. Реализация операций по чтению данных из файла будет проще, если значение для каждого поля записи размещать на отдельной строке текстового редактора.
Это примечание касается только тестовых данных.
1
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 00:25  [ТС]
По структуре всё поянл. Там в задании вот какой прикол. Есть файл, там написан ISBN, автор и так далее. Вот надо с каким-то образом по номеру исбн или по автору и году получать название книги. Касаемо структуры понятно. Непонятно как из файла всё это в нужные массивы класть. Написано по коучам, но опять же по каким. Скорее всего по исбн, ибо он уникален для каждой книги

А на самом деле сама формулировка задания удручающая(
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.10.2022, 00:36
Цитата Сообщение от daniil_novel Посмотреть сообщение
Прошу совета в алгоритме или коде
В каком алгоритме? Не вижу в задании, что должна делать программа, кроме как открывать(с прверкой на успешность сего действия) файл.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 00:50  [ТС]
Нашел вот в заданиях за прошлый год более расширенную формулировку того, что должна делать программа.

Разработать функции для выполнения операций:
1)преобразование тестовых данных из текстового файла в двоичный файл;
2)сохранение данных двоичного файла в текстовом, так, чтобы используя их можно было восстановить двоичный файл;
3)вывод всех записей двоичного файла;
4)доступ к записи по ее порядковому номеру в файле, используя механизм прямого доступа к записи в двоичном файле;
5)удаление записи с заданным значением ключа, выполнить путем замены на последнюю запись.
6)манипулирование записями в двоичном файле согласно дополнительным операциям, определенным в варианте;
7)Сохраните функции в новом модуле.
8)Разработать приложение, демонстрирующее выполнение всех операций, подключив к нему модуль с функциями.
Выполнить тестирование приложения, продемонстрировав выполнение всех операций.

Получается нужно создать файл согласно условию исбн-автор-год... и потом сделать функция добавления и удаления из файла по номеру. Видимо еще дописывание и изменение существующих
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 00:53
Цитата Сообщение от SmallEvil Посмотреть сообщение
char isbn[12];
нужно брать 13 , для нуля еще.

Добавлено через 1 минуту
daniil_novel, уже лучше, и не нужно никакого ключа в записях, и никакого хеша.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 00:58  [ТС]
Само задание называется как "Открытый адрес (двойное хэширование)", хотя преподы любят понаписать всякое, а потом сказать, что надо было головой подумать и сделать вообще всё иначе)). А я как на зло ещё и разобраться хочу
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 01:00
Цитата Сообщение от daniil_novel Посмотреть сообщение
"Открытый адрес (двойное хэширование)"

Неее, я для такого слишком стар
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
20.10.2022, 01:02
Цитата Сообщение от daniil_novel Посмотреть сообщение
4)доступ к записи по ее порядковому номеру в файле, используя механизм прямого доступа к записи в двоичном файле;
5)удаление записи с заданным значением ключа, выполнить путем замены на последнюю запись.
Но ведь п.5 изменяет "порядковй номер" последней записи. Не лучше ли хранить таблицу идентификаторов?

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
нужно брать 13 , для нуля еще.
Двенадцатизначное число поместится в восмибайтовом uint64_t.

0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 01:07  [ТС]
Ахах. На самом деле практика показывает, что двойное хэширование вообще никто так и не применил. Видимо надо просто как-то по исбн в файле считывать название книги. В основном это и вызывает трудности. Ну и редактирование файла тоже

Добавлено через 3 минуты
Таблицу хранить скорее всего лучше, ибо не надо лишний раз файл читать. О-оптимизация. Но вот как сделать такую таблицу, я не очень знаю. Проще просто еще разок файл прочитать
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 01:20
Цитата Сообщение от zayats80888 Посмотреть сообщение
Не лучше ли хранить таблицу идентификаторов?
Кто любит "геморой", тому может и лучше. Не думаю что для учебной задачи нужен индексный файл создавать.

Цитата Сообщение от daniil_novel Посмотреть сообщение
Видимо надо просто как-то по исбн в файле считывать название книги. В основном это и вызывает трудности. Ну и редактирование файла тоже
Самое простое решение, сделать класс для доступа к определенной записи по порядковому номеру.
Можно добавить в него свой итератор. (опционально)
Дальше можно расширить функционал для поиска по любому полю записи.
Это же обычная арифметика.

Цитата Сообщение от zayats80888 Посмотреть сообщение
Но ведь п.5 изменяет "порядковй номер" последней записи
И кого это должно волновать ?
Задание само по себе стремное. Никогда не мог понять смысл подобных заданий.
До БД пилить никто не будет, а на тяп ляп ничего толкового не получишь. То есть , смысл, что бы эффективно работать с большой базой (файлом), не пляшет ни разу. Да и про индексирование в задании тоже не пахнет.

Добавлено через 2 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Двенадцатизначное число поместится в восмибайтовом uint64_t.
ISBN Может начинатся с нулей (не знаю в реальности может ли), лучше использовать строковое представление.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 01:23  [ТС]
Сложно звучит. Не очень понимаю как по порядковому номеру искать. Там же типо для этой задачи ISBN служит. Или это вариант, чтобы вообще ключ ISBN не использовать?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 01:34
Цитата Сообщение от daniil_novel Посмотреть сообщение
вариант, чтобы вообще ключ ISBN не использовать?
Только когда нужно найти запись по нему.
Но для этого нужно сначала перейти на начало записи.

Например наша запись занимает 20 байт.
Нащ файл 100 байт.
100/20 = 5 записей. Опа, мы уже знаем сколько записей в файле.
Дальше, хотим прочитать 3 запись.
Устанавливаем позицию чтения на 20*(3-1), читаем нашу запись.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 01:39  [ТС]
Блин. Стыдно конечно, что столько всего не знаю, но как мы в коде узнаем вес файла? А как установим позицию для чтения?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2022, 01:50
daniil_novel, это особенности реализации. Не алгоритм.
Для всех бинарных файлов, доступные такие инструменты.
Все зависит от того какие вы будете использовать.

Можно и со стандартными потоками работать.
Можно использовать Си(унаследованные) функции для работы с файлами.
Или вообще использовать API OS.
0
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
20.10.2022, 02:02  [ТС]
Да вроде бы надо через потоки, но пока с реализацией туго
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2022, 02:02
Помогаю со студенческими работами здесь

Работа с двоичными файлами
1. Постановка задачи Создать файл, содержащий числовые данные целого или вещественного типа и выполнить их обработку согласно заданному...

Работа с двоичными файлами
Всем привет.. пытаюсь понять один вопрос. допустим есть текстовый файл с таким содержанием я хочу эту информацию переписать в...

Работа с двоичными файлами
Создать файл и записать в него вещественные числа из диапазона от a до b с шагом h. Дана последовательность из n вещественных чисел....

Работа с двоичными файлами
Здравствуйте!!! Ребята подскажите по такому вопросу. Есть код который я набрал из учебника вот он: void __fastcall...

Работа с двоичными файлами
Создать файл,состоящий из n вещественных чисел. Вывести на экран все числа данного файла не попадающие в данный диапазон!!!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru