Вниз
Скачать: CL | DM;

удалить запись из файла   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
4-72989
vasil
2003-11-18 05:11
2004.01.23
передача данных другой форме


1-72774
Noname
2004-01-13 13:27
2004.01.23
RegisterComponents


14-72935
Igorek
2003-12-30 12:23
2004.01.23
С Новым Годом персонально!


14-72878
Yegorka_KiSs
2003-12-22 12:15
2004.01.23
помогите


11-72696
SPeller
2003-05-08 05:21
2004.01.23
Хорошая работа




   Наверх