Работа с файлами
I. Работа с файлами.
Файловый тип можно задать одним из трех способов:
<имя> = File of <тип>; { типизированный файл }
<имя> = TextFile; { текстовый файл }
<имя> = File; { нетипизированный файл }
Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре AssignFile:
AssignFile (<ф.п.>, <имя файла>);
Для инициации файловой переменной используются процедуры Reset, Rewrite, Append (только для текстовых файлов). Закрывается файл процедурой CloseFile (F), при этом связь файловой переменной F с именем файла, установленная ранее процедурой AssignFile, сохраняется.
Использование процедур Read, Readln, Write, Writeln, Seek; функций Eof, Eoln, FileSize, FilePos аналогично их применению в Паскале.
При использовании стандартной процедуры
Reset (<ф.п.>)
инициируется уже существующий файл для чтения и записи (в текстовых файлах только для чтения). При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате указатель записей файла перемещается на начало файла, т.е. на компонент с номером 0. При попытке выполнить чтение из несуществующего файла, возникает исключительная ситуация. Для поверки, существует ли дисковый файл, можно использовать стандартную функцию FileExists(<имя файла>), которая возвращает True, если указанный при обращении к этой функции файл существует, и False в противном случае.
Стандартная процедура
ReWrite(<ф.п.>);
инициирует запись и чтение (для текстовых файлов только запись) информации в файл, связанный с файловой переменной. Процедурой ReWrite нельзя инициировать запись информации в ранее существовавший дисковый файл, при выполнении этой процедуры старый файл (если он был) уничтожается.
|
Модуль Unit1.pas ввод теста.
Для изменения порядка перемещения по объектам используется команда Tab Order контекстного меню окна Проектировщика форм.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
MainMenu1: TMainMenu;
N1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure New1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Type MyRecord=Record
question: string[50];
reply1: string[20];
reply2: string[20];
reply3: string[20];
number: 0..2;
end;
MyFile=File of MyRecord;
var F: MyFile;
A: MyRecord;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
With a Do
Begin
question:=Memo1.Text;
reply1:=Edit1.Text;
reply2:=Edit2.Text;
reply3:=Edit3.Text;
number:=StrToInt(Edit4.Text)
End;
Write(F,A);
Memo1.Text:='';
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit4.Text:='';
Form1.Memo1.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text:=''
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F)
end;
procedure TForm1.New1Click(Sender: TObject); {New1 пункт меню Новый }
begin
With SaveDialog1 do
Begin
Filter:='Все файлы(*.*)|*.*|Файлы тестов (*.txt)|*.txt';
Title:='Создание файла';
FilterIndex:=2;
InitialDir:='G:\Borland\Delphi5\Projects\Project1';
DefaultExt:='txt';
If Execute Then
Begin
AssignFile(F,Filename);
ReWrite(F);
Seek(F,FileSize(F));
End;
End;
end;
procedure TForm1.Save1Click(Sender: TObject); {Save1 пункт меню Открыть }
begin
OpenDialog1.Filter:='Все файлы(*.*)|*.*|Файлы тестов (*.txt)|*.txt';
OpenDialog1.Title:='Выбор файла';
OPenDialog1.FilterIndex:=2;
OpenDialog1.InitialDir:='G:\Borland\Delphi5\Projects\Project1';
OpenDialog1.DefaultExt:='txt';
If OpenDialog1.Execute Then
Begin
AssignFile(F,Opendialog1.Filename);
ReSet(F);
Seek(F,FileSize(F));
End;
end;
end.
|
Модуль Unit2.pas: выполнение теста.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus;
type
TForm2 = class(TForm)
Memo1: TMemo;
Button1: TButton;
RadioGroup1: TRadioGroup;
Label1: TLabel;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
Open1: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
Type MyRecord=Record
question: string[50];
reply1: string[20];
reply2: string[20];
reply3: string[20];
number: 0..2;
end;
MyFile=File of MyRecord;
var F: MyFile;
A: MyRecord;
K: Byte;
n: 0..2;
implementation
{$R *.DFM}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F)
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=n Then
Begin
Inc(k);
Label1.Caption:=IntToStr(k)
End;
If Not EOF(F) Then
Begin
read(F,A);
With a Do
Begin
Memo1.Text:=question;
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add(reply1);
RadioGroup1.Items.Add(reply2);
RadioGroup1.Items.Add(reply3);
n:=number;
End;
End;
end;
procedure TForm2.Open1Click(Sender: TObject);
begin
With OpenDialog1 do
Begin
Filter:='Все файлы(*.*)|*.*|Файлы тестов (*.txt)|*.txt';
Title:='Открытие файла';
FilterIndex:=2;
InitialDir:='G:\Borland\Delphi5\Projects\Project1';
DefaultExt:='txt';
If Execute Then
Begin
AssignFile(F,Filename);
Reset(F);
Seek(F,0);
End;
End;
If Not EOF(F) Then
Begin
read(F,A);
With a Do
Begin
Memo1.Text:=question;
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add(reply1);
RadioGroup1.Items.Add(reply2);
RadioGroup1.Items.Add(reply3);
n:=number;
End;
End;
k:=0;
end;
end.