Хранение текста в двоичном файле
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
RE: Хранение текста в двоичном файле - 2009-05-06 17:08:52.430000
|
|
|
Nitrino
Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
|
Помогите пожалуйста с набросками и алгоритмом программы, а дальше сам буду разбираться
|
|
|
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=динамические+структуры+данных
|
|
|
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) построчный просмотр - банально, не зависит от структуры данных.
|
|
|
RE: Хранение текста в двоичном файле - 2009-05-06 21:53:19.196666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ты невнимательно читал задание. На уровне лабы рациональнее решение не придумаешь, если не читать последние 3 пункта, которые противоречат исходному условию. + Не сказано, что в начале файла можно что-то держать.
|
|
|
RE: Хранение текста в двоичном файле - 2009-05-06 23:12:33.213333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: _SaZ_ Ты невнимательно читал задание. На уровне лабы рациональнее решение не придумаешь, если не читать последние 3 пункта, которые противоречат исходному условию. + Не сказано, что в начале файла можно что-то держать. В первой приписке к заданию как раз и сказано, что можно (и нужно) дописывать что-то в начале файла. Но автор всё равно мудак :) И на уровне лабы давать задание, состоящее из 10 подпунктов, вообще не рационально.
|
|
|
RE: Хранение текста в двоичном файле - 2009-05-06 23:36:16.480000
|
|
|
Nitrino
Сообщений: 4
Оценки: 0
Присоединился: 2009-05-04 16:23:50.260000
|
Это на самом деле задание курсовика, и 3 нижних пункта, считаются как разные курсовики
|
|
|
|
|