Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
1-72755
Austin
2004-01-13 03:43
2004.01.23
удалить запись из файла


1-72716
agent008
2004-01-12 08:49
2004.01.23
Как передать фокус


3-72647
oss
2003-12-26 12:11
2004.01.23
импорт данных


1-72790
Alewa
2004-01-12 22:58
2004.01.23
как остановить readfile??


14-72883
Teren
2004-01-02 23:19
2004.01.23
Закройте этот форум!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский