Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Внизудалить запись из файла Найти похожие ветки
← →
Austin (2004-01-13 03:43) [0]Здравствуйте!
Дано:
type
TMyRecord = record
a,b,c: integer;
s: string;
end;
f: file of TMyRecord;
Вопрос - а как удалить n-ую запись в файле?
Заранее спасибо.
← →
wnew (2004-01-13 03:56) [1]Считываешь файл и одновременно записываешь считанные записи в другой файл, а n-ную запись не пишешь, потом считаный файл удаляешь, а в который писал переименовываешь в прежний.
← →
wnew (2004-01-13 04:15) [2]Да, ещё. Запись, содержащую поле типа string, не возможно использовать в качестве типа файла. В этом случае испульзуй s: array[1..n] of Char.
Читай хелп по типизированым файлам.
← →
Babay (2004-01-13 04:53) [3]Можно еще ввести флаг который содержит информацию о том что запись якобы удалена и когда идет запись в файл то прежде всего презаписываются такие записи, а при выборке их не учитывать.
дополнение к wnew (13.01.04 04:15) [2]
можно просто использовать ограниченный String например
s:String[20];
← →
Austin (2004-01-13 06:20) [4]Спасибо! Мои опасения оправдались :).
2 wnew
> Да, ещё. Запись, содержащую поле типа string, не возможно
> использовать в качестве типа файла. В этом случае испульзуй
> s: array[1..n] of Char.
Я это знал - просто торопился и написал через стринг для примера. Кстати нижняя граница диапозона должна равняться 0, а не 1, т.е. должно быть s:array[0..n] of Char.
← →
Anatoly Podgoretsky (2004-01-13 08:47) [5]Austin (13.01.04 06:20) [4]
Это еще почему, мы не в Си
← →
Tt (2004-01-13 09:26) [6]Если просто тупо удалить(не используя вспомогат. файлов), то можно установиться на n+1 позицию в файле, считать текущую запись, вернуться на позицию n, записать информацию туда, и так далее до конца файла. В рез-те получится файл с прежним кол-вом записей, удаляемая будет затерта, а последняя запись будет повторяться 2 раза. Для усечения файла можно использовать процедуру truncate.
← →
Austin (2004-01-13 18:21) [7]2 Anatoly Podgoretsky
Если присвоить какое-нибудь значение строке в записи, то на этапе компиляции возникнет ошибка "Incompatible types: "Array" and "String"". Правда и в моём варианте возникнет ошибка, если напр. написатьs:="blah blah blah"+inttostr(n).
Но! Всегда есть выход, в данном случае функция StrCopy.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c