как удалить конкретную строку из файла произвольного доступа - PullRequest
1 голос
/ 01 июня 2009

Я использую файл произвольного доступа, в котором я хочу удалить строку, которая удовлетворяет некоторому условию, например, если у меня есть записи

MCA 30

MBA 20

BCA 10

Теперь мое требование: если я введу MBA, то вторая строка будет удалена.

Ответы [ 3 ]

2 голосов
/ 01 июня 2009

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

Некоторые вещи вместо этого помечают элементы, которые удалены, с некоторым недопустимым значением, чтобы определить, что слот не используется. Как правило, они даже не используют повторно удаленные слоты, так как это гораздо больше управления, чем вы можете себе представить, и в основном реализует архитектуру, подобную куче, в файле. Им нужен отдельный шаг «уплотнения», чтобы позже удалить это мертвое пространство. Microsoft Jet (как в Access) работал следующим образом.

Существует очень классная оптимизация, которая применима в некоторых случаях:

Если строки неупорядочены и имеют одинаковую длину, вы можете перезаписать запись, которую хотите «удалить», последней записью и обрезать файл.

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

1 голос
/ 01 июня 2009

Если это простой текстовый файл, вам придется скопировать все, кроме строк MBA, в новый файл. Файлы произвольного доступа не поддерживают удаление или вставку.

Оптимизация: переместить все после выравнивания MBA (в том же файле)

Альтернатива: использовать что-то более структурированное, например, базу данных.

0 голосов
/ 01 июня 2009

Мне кажется, что вы ищете реализацию, похожую на 'grep'. Существует реализация Java GNU grep, вы можете найти документацию здесь , и скачать по ссылке на этой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...