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

Список и типизированный файл   Найти похожие ветки 

← →
Random   (2002-05-25 14:10) [0]

Такой вопрос. Имеется запиись
Info = record
Sirname:string[40];
Diagnos:string;
end;
И файл f:file of Info
Нужно организовать индекс ключей файла в виде линейного списка. Ключем является поле sirname. Как?
И еще вопрос, как удалить определенную запись из такого файла?


← →
ION T ©   (2002-05-25 16:42) [1]

А нафиг тебе типизированный файл? Он все равно не работает со строками неопределенной длинны, к тому-же удалять из них тоже нельзя (можно тока в индексе ссылку убить). Тебе нормальная БД нужна..а БДЕ, в крайнем случае, поддерживает работу с текстовыми файлами (только тоже без удаления и с другими ограничениями)


← →
Random   (2002-05-25 16:44) [2]

Таково задание курсовой :( Иначе стал бы я с этой фигней гемороится. И все же кто может - помогите!


← →
ION T ©   (2002-05-25 16:54) [3]

Ну можешь просто писать в байтовый файл, а в индексе писать пару смещение+размер...или запись переделать во что-то наподобии:

Info = record
Length: integer;
Surname: string[40];
Diagnose: string;
end;

А затем читать значение Length и читать столько байтов....


← →
Random   (2002-05-25 17:43) [4]

Ладно с индексами, подскажите,как удалить элемент. Например, если нельзя напрямую, скопировать в буфер обмена все, кроме нужного эл-та, а потом обратно. Как технически это сделать?


← →
MBo ©   (2002-05-25 17:46) [5]

если непременно надо с типизированным файлом, придется писать во временный до удаляемой записи, потом после нее, удалять старый и переименовывать. Умеешь работать со Stream? Это бы сильно ускорило и упростило процесс.


← →
Jin ©   (2002-05-25 17:48) [6]

Удаление из типизированого файла делать следующим образом:
1) переписать все записи кроме удаляемой во temp файл
2) удалить исходный
3) переименовать temp в исходный



← →
Jin ©   (2002-05-25 17:51) [7]

Уфф пока писал уже ответили :)))


← →
Random   (2002-05-25 18:29) [8]

Большое спасибо за дельные советы!
Тогда уж подскажите, как добавлять новую запись(Append не работает) и изменять имеющиеся.
Ну и гемор с этими типизированными файлами :)


← →
MBo ©   (2002-05-25 18:45) [9]

все перезаписью. про гемор правда ;)


← →
Jin ©   (2002-05-25 22:13) [10]

Нет. Типизированый файл можно открыть reset"ом и изменять данные обычным write"ом. То есть сначало ищем нужную запись, потом seek на позицию назад, и write новые данные.


← →
Jin ©   (2002-05-25 22:14) [11]

Соответственно, если писать за границей файла открытого reset"ом, записи будут добавляться.


← →
Anatoly Podgoretsky ©   (2002-05-25 23:00) [12]

Но ты вообще не можешь использовать типизированный файл для такого типа записи, если не изменишь Diagnos:string;.

К вопросу об уделении, удаление можно делать без создания нового файла, достаточно использовать seek
Но еде проще добавить один член в записи - deleted: boolean
и использовать удаленные записи повторно


← →
Jin ©   (2002-05-25 23:15) [13]

Anatoly Podgoretsky
А как удалять из типизированного файла, использую толко сеек?
Пустые места чем потом заполнять?


← →
KilkennyCat ©   (2002-05-26 09:24) [14]

В пустом месте написать: "Здесь было то-то и то-то. Удалено пользователем" :))
А использование TIniFile не будет противоречить заданию курсовой?
чем не "типизированый файл" :) ? очень похож!


← →
Anatoly Podgoretsky ©   (2002-05-26 10:58) [15]

Удалять не нужно, надо перемещать остаток записей вперед на пустое место, а вот удать нужно последню запись после перемещения, при таком методе не нужен ни второй файл ни переименования.



Страницы: 1 вся ветка

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



Память: 0.48 MB
Время: 0.01 c
14-18126
Dimaiv
2002-05-01 15:58
2002.06.06
Для курсовой нужна хвалебная речь о Delphi cтраницы на 2-3


1-17937
Vadim_Kyznetsov
2002-05-27 22:22
2002.06.06
Обработка файлов


14-18130
kingdom
2002-05-01 15:46
2002.06.06
Помогите защитить логи!!!


1-17879
dim-
2002-05-26 12:17
2002.06.06
интеграция в эксплорер


1-18011
stupid
2002-05-23 18:28
2002.06.06
Как можно подставить в сообщение определенный текст?




   Наверх