- •Программирование в среде delphi
- •050100.62 «Информатика» заочное
- •1. Описание структуры курсового проекта
- •Глава 1. Теоретическая часть
- •Глава 2. Практическая часть
- •2. Оформление курсового проекта
- •Образец оформления титульного листа курсового проекта
- •Примеры оформления библиографического списка литературы
- •1. Описание однотомников:
- •9. Технико-экономические нормативы, прейскуранты, инструкции:
- •10. Электронные ресурсы:
- •Варианты заданий на курсовую работу
- •Доступ к файлам
- •Инициализация (инициация) файла.
- •Закрытие файла.
- •Процедуры и функции для работы с файлами
- •Текстовые файлы
- •Обработка ошибок при работе с файлами
- •Использование объектов tOpenDialog и tSaveDialog
- •Типизированные файлы
Обработка ошибок при работе с файлами
При обращении к файлу, т.е. к диску, могут возникать ошибки, приводящие к ненормальному завершению работы приложения. Эти ошибки необходимо предусмотреть и соответствующим образом обработать.
В основном, ошибки возникают при открытии файла, реже при чтении/записи из них. Чтобы обработать ошибку ввода/вывода (ошибки при работе с файлами), необходимо использовать соответствующую директиву компилятора (специальным образом оформленное указание компилятору внутри кода программы).
Директивы заключаются в фигурные скобки {}, внутри ставится обозначение соответствующей директивы и “+” или “-”:
{<обозначение директивы><>}
{I-} – отключает контроль ошибок ввода/вывода;
{I+} – включает контроль ошибок I/O.
Если делается попытка чтения несуществующего файла или логического устройства, то возникает ошибка времени выполнения, тип ошибки можно определить с помощью встроенной функции IOResult:word. Эта функция возвращает результат последней операции ввода/вывода. Если операция прошла успешно, функция возвращает 0, иначе возвращает код ошибки ввода/вывода. Для использования этой функции необходимо отключить контроль ошибок I/O.
Procedure TForm1.Button1Click(Sender: TObject);
v
ar
f1: textfile;
s: string;
Begin
assignfile(f1, Edit1.text);
{I-}
reset(f1); Открываем для чтения
if IOResult<>0 then
begin
ShowMessage(‘Неверное имя файла!’);
Exit;
End;
{I+}
while not eof(f1) do
begin
readln(f1, s); Считываем из файла
Memo1.Lines.Add(s);
end;
End;
Использование объектов tOpenDialog и tSaveDialog
В Delphi существуют объекты для работы с файлами, в частности: TOpenDialog, TSaveDialog.
Эти объекты позволяют открывать и использовать стандартные диалоговые окна открытия, сохранения файла. Вызов диалогового окна осуществляется с помощью метода Execute: boolean, который возвращает истину, если окно отрылось успешно, и ложь в противном случае.
Пример.
If OpenDialog1.Execute then
begin
assignfile(f, OpenDialog1.filename);
reset(f);
…
end;
или
Procedure TForm1.Button1Click(Sender:TObject);
var fName: string;
begin
if OpenDialog1.Execute then
begin
fName:=OpenDialog1.FileName;
Panel1.Caption:=fName;
end;
Типизированные файлы
Длина любого компонента типизированного файла постоянна, что даёт возможность организовать прямой доступ к каждому из них. Каждая запись файла может быть доступна путём указания её порядкового номера. После открытия файла указатель стоит в его начале и указывает на первый компонент с номером 0. После каждой операции чтения или записи указатель смещается на одну позицию, т.е. на одну запись.
Переменные в списках ввода/вывода процедур read, write должны иметь тот же тип, что и компоненты файла (работает правило приведения типов). Если переменных в списках I/O несколько, то указатель будет смещаться после каждой операции обмена данными между переменными и файлом.
Пример объявления типизированного файла.
Var
f: file of integer;
t: file of string[20];
a: integer;
b: byte;
i: int64;
x: string[20];
Procedure TForm1.Button1Click (Sender: TObject);
Begin
assignfile(f, ‘c:\FEI\int.dat’);
assignfile(t, ‘c:\FEI\string.dat’);
rewrite(f); //Файл открыт для записи
rewrite(t); //Файл открыт для записи
write(f, a, b); //Запись в файл
write(t, x, ‘abcdef’); //Запись в файл
reset(f); //Файл открыт для записи и чтения
reset(t); //Файл открыт для записи и чтения
read(f, c); //Читаем из файла
read(t, x);
write(t, ‘stuwn’); //Запись в файл
End;
Процедура Reset, применительно к типизированным файлам, открывает как для записи, так и для чтения одновременно. Rewrite работает аналогично случаю с текстовыми файлами.
Seek(<ф.п.>,<N записи>); – процедура смещает указатель файла к требуемой записи.
Здесь <ф.п.> - дескриптор файла, <N записи> – выражение типа int64, указывающее номер записи файла. Первая запись имеет номер 0.
seek(f, 5);
read(f, x);
FileSize(<ф.п.>):int64; – функция возвращает количество записей в файле.
SizeOf(<экземпляр структуры>); – возвращает занимаемый размер в байтах.
Var
z: word;
…
SizeOf(z); //2
FilePos(<ф.п.>):int64; – функция возвращает порядковый номер записи файла, которая будет обработана следующей операцией ввода/вывода.
-
0
1
→
2
FilePos вернет 2
3
4
Пример.
Создадим базу данных, содержащей информацию о погоде. База данных состоит из одной таблицы:
Поле |
Месяц |
День |
t0C |
V ветра |
Направление ветра |
Тип |
byte |
byte |
real |
real |
string[3] |
Type
pogoda = record
m: byte;
d: byte;
t: real;
sv: real;
nv: string[3];
end;
Var
f: file of pogoda;
a,b: pogoda;
i: int64;
Procedure TForm1.Button1Click (Sender: TObject);
{Заполнение файла}
begin
assignfile(f, ‘c:\FEI\pogoda.dat’);
rewrite(f);
a.m:=2;
a.d:=20;
a.t:=-4;
a.sv:=3.5;
a.nv:=’СЗ’;
write(f, a);
end;
Procedure TForm1.Button2Click (Sender: TObject);
{просмотр файла}
begin
reset(f);
i:=0;
while not eof(f) do
begin
read(f,b);
i:=i+1;
with StringGrid1 do
begin
Cells[1,i]:= inttostr(b.m);
Cells[2,i]:= inttostr(b.d);
…
end;
end;
end;
