|
Вопрос # 1 234/ вопрос открыт / |
|
Здравствуйте, эксперты!
Существует некий тип (приложение).
Возможно ли записать в файл, несколько переменных такого типа, причем не сразу? Атакже считать, изменить или удалить отдельную запись? И как бы это оптимальнее сделать.
 |
Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 27 декабря 2007, 14:13
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Трофимов Евгений!
Конечно же можно так делать. Только надо определиться со структурой такого файла, что бы Вы могли осуществлять поиск, чтение, запись и удаление Вашей записи.
Предлагаю Вам рассмотреть несколько примеров по Вашему вопросу:
1. Файл с множеством записей.
2. Добавление записи в файл.
3. Запись и чтение из файла массива записей.
Приложение: Переключить в обычный режим-
- type
- TSaveHeader = record
- scene: Integer;
- hotspots: LongInt;
- talk: LongInt;
- hype: LongInt;
- end;
-
- var
- SaveHeader: TSaveHeader;
-
- procedure OpenSaveFile(fname: string);
- var
- f: file;
- i: Integer;
- begin
- AssignFile(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);
- var
- offset: LongInt;
- begin
- offset := SaveHeader.hotspots + index * Sizeof(THotSpot);
- Seek(f, offset);
- BlockRead(f, hotspotrec, Sizeof(THotspot));
- end;
- **********************************************************************
-
- unit apprec;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ExtCtrls;
-
- type
- TForm1 = 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;
-
- var
- Form1: TForm1;
-
-
- implementation
-
- {$R *.DFM}
-
-
-
- procedure TForm1.FormActivate(Sender: TObject);
- var
-
- begin
- AssignFile(f, 'a:medals.db');
- {$I-}
-
-
- {$I+}
- if IOResult = 0
-
- else
- begin
-
-
- if resp = mrYes then
- begin
- {$I-}
- rewrite(f);
- {$I+}
- if IOResult = 0
- then button1.enabled := TRUE
-
- end;
- end;
- end;
-
-
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- medal: TMedal;
- begin
- with medal do
- begin
- 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.
- **********************************************************************
-
- type
- TMyRec = record ;
- Field1: integer;
- Field2: string;
- end;
-
- TMyRecArray = array[0..9] of TMyRec;
-
- var
- MyArray: TMyRecArray;
- MyRec: TMyRec;
- RecFile: file of TMyRec;
-
- begin
-
-
- AssignFile(RecFile, 'MYREC.FIL');
- ReWrite(RecFile);
- for i := 0 to 9 do
- begin
- 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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|