| 
| 
 | Вопрос # 1 234/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Существует некий тип (приложение).
 Возможно ли записать в файл, несколько переменных такого типа, причем не сразу? Атакже считать, изменить или удалить отдельную запись? И как бы это оптимальнее сделать.
 
|  |   Вопрос задал: Евгений Eklmn (статус: Посетитель)Вопрос отправлен: 27 декабря 2007, 14:13
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, Трофимов Евгений!Конечно же можно так делать. Только надо определиться со структурой такого файла, что бы Вы могли осуществлять поиск, чтение, запись и удаление Вашей записи.
 Предлагаю Вам рассмотреть несколько примеров по Вашему вопросу:
 1. Файл с множеством записей.
 2. Добавление записи в файл.
 3. Запись и чтение из файла массива записей.
 Приложение:Переключить в обычный режим  typeTSaveHeader = record   scene: Integer;   hotspots: LongInt;   talk: LongInt;   hype: LongInt;end; varSaveHeader: TSaveHeader; procedure OpenSaveFile(fname: string);varf: file;i: Integer;beginAssignFile(f, fname);Reset(f, 1);BlockRead(f, SaveHeader, Sizeof(TSaveHeader)); Seek(f, SaveHeader.hotspots);for i := 1 to 50 do   BlockRead(f, somevar, sizeof_hotspotrec); CloseFile(f);end;   procedure GetHotspotRec(index: LongInt; var hotspotrec: THotspot);varoffset: LongInt;beginoffset := SaveHeader.hotspots + index * Sizeof(THotSpot);Seek(f, offset);BlockRead(f, hotspotrec, Sizeof(THotspot));end; ********************************************************************** unit apprec; interface usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls; typeTForm1 = class(TForm)   Label1: TLabel;   Label2: TLabel;   Label3: TLabel;        Label5: TLabel;   Label4: TLabel;   procedure FormActivate(Sender: TObject);   procedure FormClose(Sender: TObject; var Action: TCloseAction);   procedure Button1Click(Sender: TObject);private   { Private declarations }public   { Public declarations }end;  TKind = (GOLD, SILVER, BRONZE);  TMedal = record    end; varForm1: TForm1;  implementation {$R *.DFM}   procedure TForm1.FormActivate(Sender: TObject);var beginAssignFile(f, 'a:medals.db');{$I-}  {$I+}if IOResult = 0 elsebegin     if resp = mrYes then   begin{$I-}     rewrite(f);{$I+}     if IOResult = 0       then button1.enabled := TRUE    end;end;end;   procedure TForm1.Button1Click(Sender: TObject);varmedal: TMedal;beginwith medal dobegin   country := ComboBox1.Text;   sport := ComboBox2.Text;   person := Edit1.Text;   case RadioGroup1.ItemIndex of     0: kind := GOLD;     1: kind := SILVER;     2: kind := BRONZE;   end;end; end;   procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin end; end.********************************************************************** typeTMyRec = record ;   Field1: integer;   Field2: string;end; TMyRecArray = array[0..9] of TMyRec; varMyArray: TMyRecArray;MyRec: TMyRec;RecFile: file of TMyRec; begin  AssignFile(RecFile, 'MYREC.FIL');ReWrite(RecFile);for i := 0 to 9 dobegin   Write(RecFile, MyRec[i]);end;CloseFile(RecFile);end;     type TR=Record       Name:string[100];        Age:Byte;        Income:Real;       end; var f:file of TR;    r:TR;  begin //assign file assignFile(f, 'MyFileName'); //open file if FileExists('MyFileName') then    reset(f) else    rewrite(f);  seek(f,10); read(f,r);  seek(f, 20); write(f,r); closefile(f); end;
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 27 декабря 2007, 14:32
 Оценка за ответ: 5
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |