Вниз
Скачать: 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
1-72827
MVova
2004-01-13 15:41
2004.01.23
TADOConnection и TThread


14-72949
RDA
2004-01-03 13:39
2004.01.23
Как сделать чтобы FastReport не лез в исходники при отладке?


1-72715
Vi0let
2004-01-12 03:19
2004.01.23
Как написать одну общую процедуру для форм.


3-72631
Alex-kosmonavt
2003-12-26 13:43
2004.01.23
Маски


1-72818
Шурик Ш
2004-01-12 16:20
2004.01.23
Как получить номер строки и столбца TStringGrid, на котором...




   Наверх