Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Визуальное программирование / Визуальное программирование-лекция-5

.doc
Скачиваний:
51
Добавлен:
07.06.2015
Размер:
60.42 Кб
Скачать

Лекция № 5 DELPHI (конспекты лекций)

Работа с файлами

  1. Работа с файлами.

Файловый тип можно задать одним из трех способов:

<имя> = 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.

6