Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 234

/ вопрос открыт /

Здравствуйте, эксперты!
Существует некий тип (приложение).
Возможно ли записать в файл, несколько переменных такого типа, причем не сразу? Атакже считать, изменить или удалить отдельную запись? И как бы это оптимальнее сделать.

Приложение:
  1. type
  2. MyType = record
  3. n: string[20];
  4. t: string[3];
  5. r: string[15];
  6. a: integer;
  7. end;


Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 27 декабря 2007, 14:13
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Трофимов Евгений!
Конечно же можно так делать. Только надо определиться со структурой такого файла, что бы Вы могли осуществлять поиск, чтение, запись и удаление Вашей записи.
Предлагаю Вам рассмотреть несколько примеров по Вашему вопросу:
1. Файл с множеством записей.
2. Добавление записи в файл.
3. Запись и чтение из файла массива записей.

Приложение:
  1.  
  2. type
  3. TSaveHeader = record
  4. scene: Integer;
  5. hotspots: LongInt;
  6. talk: LongInt;
  7. hype: LongInt;
  8. end;
  9.  
  10. var
  11. SaveHeader: TSaveHeader;
  12.  
  13. procedure OpenSaveFile(fname: string);
  14. var
  15. f: file;
  16. i: Integer;
  17. begin
  18. AssignFile(f, fname);
  19. Reset(f, 1);
  20. BlockRead(f, SaveHeader, Sizeof(TSaveHeader));
  21.  
  22. Seek(f, SaveHeader.hotspots);
  23. for i := 1 to 50 do
  24. BlockRead(f, somevar, sizeof_hotspotrec);
  25.  
  26. CloseFile(f);
  27. end;
  28.  
  29.  
  30.  
  31. procedure GetHotspotRec(index: LongInt; var hotspotrec: THotspot);
  32. var
  33. offset: LongInt;
  34. begin
  35. offset := SaveHeader.hotspots + index * Sizeof(THotSpot);
  36. Seek(f, offset);
  37. BlockRead(f, hotspotrec, Sizeof(THotspot));
  38. end;
  39. **********************************************************************
  40.  
  41. unit apprec;
  42.  
  43. interface
  44.  
  45. uses
  46. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  47. StdCtrls, ExtCtrls;
  48.  
  49. type
  50. TForm1 = class(TForm)
  51. Label1: TLabel;
  52. Label2: TLabel;
  53. Label3: TLabel;
  54.  
  55.  
  56.  
  57.  
  58.  
  59. Label5: TLabel;
  60. Label4: TLabel;
  61. procedure FormActivate(Sender: TObject);
  62. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  63. procedure Button1Click(Sender: TObject);
  64. private
  65. { Private declarations }
  66. public
  67. { Public declarations }
  68. end;
  69.  
  70.  
  71. TKind = (GOLD, SILVER, BRONZE);
  72.  
  73.  
  74. TMedal = record
  75.  
  76.  
  77.  
  78.  
  79. end;
  80.  
  81. var
  82. Form1: TForm1;
  83.  
  84.  
  85. implementation
  86.  
  87. {$R *.DFM}
  88.  
  89.  
  90.  
  91. procedure TForm1.FormActivate(Sender: TObject);
  92. var
  93.  
  94. begin
  95. AssignFile(f, 'a:medals.db');
  96. {$I-}
  97.  
  98.  
  99. {$I+}
  100. if IOResult = 0
  101.  
  102. else
  103. begin
  104.  
  105.  
  106. if resp = mrYes then
  107. begin
  108. {$I-}
  109. rewrite(f);
  110. {$I+}
  111. if IOResult = 0
  112. then button1.enabled := TRUE
  113.  
  114. end;
  115. end;
  116. end;
  117.  
  118.  
  119.  
  120. procedure TForm1.Button1Click(Sender: TObject);
  121. var
  122. medal: TMedal;
  123. begin
  124. with medal do
  125. begin
  126. country := ComboBox1.Text;
  127. sport := ComboBox2.Text;
  128. person := Edit1.Text;
  129. case RadioGroup1.ItemIndex of
  130. 0: kind := GOLD;
  131. 1: kind := SILVER;
  132. 2: kind := BRONZE;
  133. end;
  134. end;
  135.  
  136. end;
  137.  
  138.  
  139.  
  140. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  141. begin
  142.  
  143. end;
  144.  
  145. end.
  146. **********************************************************************
  147.  
  148. type
  149. TMyRec = record ;
  150. Field1: integer;
  151. Field2: string;
  152. end;
  153.  
  154. TMyRecArray = array[0..9] of TMyRec;
  155.  
  156. var
  157. MyArray: TMyRecArray;
  158. MyRec: TMyRec;
  159. RecFile: file of TMyRec;
  160.  
  161. begin
  162.  
  163.  
  164. AssignFile(RecFile, 'MYREC.FIL');
  165. ReWrite(RecFile);
  166. for i := 0 to 9 do
  167. begin
  168. Write(RecFile, MyRec[i]);
  169. end;
  170. CloseFile(RecFile);
  171. end;
  172.  
  173.  
  174.  
  175.  
  176.  
  177. type TR=Record
  178. Name:string[100];
  179. Age:Byte;
  180. Income:Real;
  181. end;
  182. var f:file of TR;
  183. r:TR;
  184.  
  185. begin
  186. //assign file
  187. assignFile(f, 'MyFileName');
  188. //open file
  189. if FileExists('MyFileName') then
  190. reset(f)
  191. else
  192. rewrite(f);
  193.  
  194. seek(f,10);
  195. read(f,r);
  196.  
  197. seek(f, 20);
  198. write(f,r);
  199. closefile(f);
  200. end;


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 27 декабря 2007, 14:32
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 23 июня 2017, 08:09
Выполнено за 0.03 сек.
Рейтинг@Mail.ru