![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список и типизированный файл [D5]
Random © (2002-05-25 14:10:00)Такой вопрос. Имеется запиись
Info = record
Sirname:string[40];
Diagnos:string;
end;
И файл f:file of Info
Нужно организовать индекс ключей файла в виде линейного списка. Ключем является поле sirname. Как?
И еще вопрос, как удалить определенную запись из такого файла?
Anatoly Podgoretsky (2002-05-26 10:58:00) [1]Удалять не нужно, надо перемещать остаток записей вперед на пустое место, а вот удать нужно последню запись после перемещения, при таком методе не нужен ни второй файл ни переименования.
KilkennyCat (2002-05-26 09:24:00) [2]В пустом месте написать: "Здесь было то-то и то-то. Удалено пользователем" :))
А использование TIniFile не будет противоречить заданию курсовой?
чем не "типизированый файл" :) ? очень похож!
Jin (2002-05-25 23:15:00) [3]Anatoly Podgoretsky
А как удалять из типизированного файла, использую толко сеек?
Пустые места чем потом заполнять?
Anatoly Podgoretsky (2002-05-25 23:00:00) [4]Но ты вообще не можешь использовать типизированный файл для такого типа записи, если не изменишь Diagnos:string;.
К вопросу об уделении, удаление можно делать без создания нового файла, достаточно использовать seek
Но еде проще добавить один член в записи - deleted: boolean
и использовать удаленные записи повторно
Jin (2002-05-25 22:14:00) [5]Соответственно, если писать за границей файла открытого reset"ом, записи будут добавляться.
Jin (2002-05-25 22:13:00) [6]Нет. Типизированый файл можно открыть reset"ом и изменять данные обычным write"ом. То есть сначало ищем нужную запись, потом seek на позицию назад, и write новые данные.
MBo (2002-05-25 18:45:00) [7]все перезаписью. про гемор правда ;)
Random (2002-05-25 18:29:00) [8]Большое спасибо за дельные советы!
Тогда уж подскажите, как добавлять новую запись(Append не работает) и изменять имеющиеся.
Ну и гемор с этими типизированными файлами :)
Jin (2002-05-25 17:51:00) [9]Уфф пока писал уже ответили :)))
Jin (2002-05-25 17:48:00) [10]Удаление из типизированого файла делать следующим образом:
1) переписать все записи кроме удаляемой во temp файл
2) удалить исходный
3) переименовать temp в исходный
MBo (2002-05-25 17:46:00) [11]если непременно надо с типизированным файлом, придется писать во временный до удаляемой записи, потом после нее, удалять старый и переименовывать. Умеешь работать со Stream? Это бы сильно ускорило и упростило процесс.
Random (2002-05-25 17:43:00) [12]Ладно с индексами, подскажите,как удалить элемент. Например, если нельзя напрямую, скопировать в буфер обмена все, кроме нужного эл-та, а потом обратно. Как технически это сделать?
ION T (2002-05-25 16:54:00) [13]Ну можешь просто писать в байтовый файл, а в индексе писать пару смещение+размер...или запись переделать во что-то наподобии:
Info = record
Length: integer;
Surname: string[40];
Diagnose: string;
end;
А затем читать значение Length и читать столько байтов....
Random (2002-05-25 16:44:00) [14]Таково задание курсовой :( Иначе стал бы я с этой фигней гемороится. И все же кто может - помогите!
ION T (2002-05-25 16:42:00) [15]А нафиг тебе типизированный файл? Он все равно не работает со строками неопределенной длинны, к тому-же удалять из них тоже нельзя (можно тока в индексе ссылку убить). Тебе нормальная БД нужна..а БДЕ, в крайнем случае, поддерживает работу с текстовыми файлами (только тоже без удаления и с другими ограничениями)