Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Хранение текста в двоичном файле

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Хранение текста в двоичном файле
Имя
Сообщение << Старые топики   Новые топики >>
Хранение текста в двоичном файле - 2009-05-06 15:55:49.260000   
Nitrino

Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
Здравствуйте!
Помогите пожалуйста с написанием программы на Borland C++ 3.1.
Программа хранения текста в двоичном файле
Вот условие задачи, решить можно любым из трёх предложеных способов



Post #: 1
RE: Хранение текста в двоичном файле - 2009-05-06 17:08:52.430000   
Nitrino

Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
Помогите пожалуйста с набросками и алгоритмом программы, а дальше сам буду разбираться

Post #: 2
RE: Хранение текста в двоичном файле - 2009-05-06 18:47:03.130000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Тебе надо бегать по файлу, т.к. по условию его нельзя целиком грузить в память.

Чтобы определить позицию в файле след. строки нужно пробежаться посимвольно до переноса строки (скорее всего \n или \r\n).

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

Удаление - нужно определить позицию начала и конца ненужной строки. Потом тоже самое, скопировать в новый файл до первой позиции, пропустить строку и запихать остальной кусок (со второй позиции).

Редактирование - аналогично.

P.S. все три способа противоречат исходному условию. Если нужен какой-то из этих трёх способов - кури http://lmgtfy.com/?q=динамические+структуры+данных
Post #: 3
RE: Хранение текста в двоичном файле - 2009-05-06 19:02:49.066666   
Nitrino

Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
_SaZ_спасибо буду разбираться с динамическими структурами
Post #: 4
RE: Хранение текста в двоичном файле - 2009-05-06 21:24:37.383333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Автор задания - мудак, совершенно не умеющий формулировать свои мысли. Автор темы очень ленивый, раз уж даже не смог перепечатать задание.

quote:

Соответственно чтобы вставить строку - находишь позицию, куда нужно её вставить.

Ооочень неэффективно, там даже в первом пункте возможных структур данных дана подсказка, как можно сделать лучше (если суметь понять, о чём вообще говорит автор).
ИМХО, самый оптимальный вариант: держать в начале файла таблицу указателей на позиции строк. Фактически, это будет просто массив int'ов, каждый элемент которого - смещение начала строки внутри файла. Таким образом, формат файла будет такой:
________________________________________________________________________
| информация_о_таблице | табилца_указателей | строка1 | строка2 | строка3… |
———————————————————————————-

Информация_о_таблице - одна запись (которая struct), хранящая в себе длину таблицы указателей, количество элементов в таблице (потом покажу, почему оно не должно быть равно длине всей таблицы) и смещение, по которому начинются сами строки.

Тогда:
1) таблицу можно полностью загрузить в оперативную память и работать с ней гораздо быстрее, только иногда записывая её назад в файл;
2) добавление строки - дописать саму строку в конец файла, добавить указатель на неё в таблицу (именно из-за этого нужно держать в таблице некоторое количество свободных мест - чтобы можно было просто вставить новый указатель, а не переписывать весь оставшийся файл);
3) извлечение - найти в таблице позицию нужной строки и напрямую считать её из файла;
4) удаление - пометить указатель на удаляемую строку каким-либо образом, например, записав туда -1. Физически сразу не удалять саму строку, а делать это раз в n удалений, например. Для этого просто перезаписать файл без учёта удалённых строк (аналогично механизму сборки мусора в Джаве). Здесь нужно иметь ввиду, что все указатели, идущие после удалённого, будут иметь уже другой порядковый номер, и это тоже нужно где-то учитывать;
5) вставка по логическому номеру - дописать саму строку в конец файла, а вот указатель на неё действительно "вставить" между другими, то есть если нам нужно вставить указатель на место i в таблице, то сначала следует передвинуть указатели с номерами от i до N-1 (где N - количество записей в таблице), а затем на освободившуюся позицию спокойно вписать новый указатель;
6) редактирование  - удалить старую строку, вставить новую - это уже можно сделать процедурами, описанными ранее;
7) вставка с сохранением порядка - а чем это отличается от пункта 5?
8) сортировка - как вариант, опять же сортировать на самом деле указатели в таблице, а не сами записи. Хотя считывать значения строк туеву хучу раз всё равно придётся;
9) эскпорт строк из текстового файла - это чё вообще автор хотел?
10) построчный просмотр - банально, не зависит от структуры данных.


Post #: 5
RE: Хранение текста в двоичном файле - 2009-05-06 21:53:19.196666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ты невнимательно читал задание. На уровне лабы рациональнее решение не придумаешь, если не читать последние 3 пункта, которые противоречат исходному условию. + Не сказано, что в начале файла можно что-то держать.
Post #: 6
RE: Хранение текста в двоичном файле - 2009-05-06 23:12:33.213333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: _SaZ_

Ты невнимательно читал задание. На уровне лабы рациональнее решение не придумаешь, если не читать последние 3 пункта, которые противоречат исходному условию. + Не сказано, что в начале файла можно что-то держать.

В первой приписке к заданию как раз и сказано, что можно (и нужно) дописывать что-то в начале файла. Но автор всё равно мудак :)

И на уровне лабы давать задание, состоящее из 10 подпунктов, вообще не рационально.
Post #: 7
RE: Хранение текста в двоичном файле - 2009-05-06 23:36:16.480000   
Nitrino

Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
Это на самом деле задание курсовика, и 3 нижних пункта, считаются как разные курсовики
Post #: 8
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Хранение текста в двоичном файле







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.