Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.23;
Скачать: 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 вся ветка

Текущий архив: 2004.01.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
3-72638
Vick
2003-12-26 11:45
2004.01.23
Аггрегатные функции для строковых величин


1-72725
Ilya
2004-01-10 21:02
2004.01.23
Проверка допустимости введённого имени директории или файла


4-72985
_8989
2003-11-14 21:00
2004.01.23
Помогите зарегистрировать комбинацию клавишь или одну...


4-72989
vasil
2003-11-18 05:11
2004.01.23
передача данных другой форме


6-72858
Novenkij
2003-11-19 20:20
2004.01.23
ServerSocket