Листинг 7.3, Простая база данных (запись в файл)




Файлы

Объявление файла

В общем виде объявление файла выглядит так: Имя: file of Тип Элементов;

Примеры:

res: file of char; // файл символов

koef: file of real; // файл вещественных чисел

f: file of integer; // файл целых чисел

Файл, компонентами которого являются данные символьного типа, называется символьным или текстовым. Описание текстового файла в общем виде выглядит так:

Имя: TextFile;

где:

  • имя — имя файловой переменной;
  • TextFile — обозначение типа, показывающее, что Имя — это файловая переменная, представляющая текстовый файл.

Назначение файла

AssignFiie (var f, Имя Файла: string)

Ниже приведены примеры вызова процедуры AssignFile:

AssignFile(f, 'a:\result.txt');

AssignFile(f, '\students\ivanov\korni.txt');

fname:=('otchet.txt'); AssignFiie(f,fname);

Вывод в файл

write (Файловая Переменная, Список Вывода);

writeln (Файловая Переменная, Список Вывода);

где:

  • Файловая Переменная — переменная, идентифицирующая файл, в который выполняется вывод;
  • Список Вывода — разделенные запятыми имена переменных, значения которых надо вывести в файл. Помимо имен переменных в список вывода можно включать строковые константы.

Например, если переменная f является переменной типа TextFile, то инструкция вывода значений переменных x1 и х2 в файл может быть такой:

write(f, 'Корни уравнения', x1, х2);

Открытие файла для вывода

Возможны следующие режимы открытия файла для записи в него данных:

  • перезапись (запись нового файла поверх существующего или создание нового файла);
  • добавление в существующий файл.

Rewrite(f), где f — файловая переменная типа TextFile.

Append (f), где f — файловая переменная типа TextFile.

На рис. 7.1 приведено диалоговое окно программы, которая выполняет запись или добавление в текстовый файл.

Рис. 7.1. Диалоговое окно программы записи-добавления в файл

В листинге 7.1 приведена процедура, которая запускается нажатием командной кнопки Записать. Она открывает файл в режиме создания нового или замещения существующего файла и записывает текст, находящийся в поле компонента Memo1.

Имя файла нужно ввести во время работы в поле Edit1. Можно задать предопределенное имя файла во время разработки формы приложения. Для этого надо присвоить значение, например test.txt, свойству Edit1.Text.

Листинг 7.1. Создание нового или замещение существующего файла

procedure TForm1.Button1Click(Sender: TObject);

Var

f: TextFile; // файл

fName: String [80]; // имя файла

i: integer;

Begin

fName:= Edit1.Text;

AssignFile (f, fName);

Rewrite (f); // открыть для перезаписи

// запись в файл

for i: =0 to Memo1.Lines.Count do // строки нумеруются с нуля

writeln(f, Memo1.Lines[i]);

CloseFile(f); // закрыть файл

MessageDlg('Данные ЗАПИСАНЫв файл ',mtInformation,[mbOk],0);

end;

В листинге 7.2 приведена процедура, которая запускается нажатием командной кнопки Добавить. Она открывает файл, имя которого указано в поле Edit1, и добавляет в него содержимое поля Memo1.

Листинг 7.2. Добавление в существующий файл

procedure TForm1.Button2Click(Sender: TObject);

Var

f: TextFile; // файл

fName: String [80];.// имя файла

i: integer;

Begin

fName:= Edit1.Text;

AssignFile (f, fName);

Append (f); // открыть для добавления

// запись в файл

for i:=0 to Memo1.Lines.Count do // строки нумеруются с нуля

writeln(f, Memo1.Lines[i]);

CloseFile(f); // закрыть файл

MessageDlg('Данные ДОБАВЛЕНЫв файл ',mtInformation,[mbOk],0);

end;

Ошибки открытия файла

Рис. 7.2. Пример сообщения об ошибке открытия файла (программа запущена из Delphi)

Если программа запускается из Windows, то окно с сообщением об ошибке выглядит иначе (рис. 7.3).

Рис. 7.3. Пример сообщения об ошибке открытия файла (программа запущена из Windows)

IOResult (Input-Output Result — результат ввода/вывода). Функция IOResult возвращает 0, если операция ввода/вывода завершилась успешно; в противном случае — код ошибки (не ноль).

{$I-},

{$I+},.

На рис. 7.4 приведена блок-схема алгоритма открытия файла для добавления, обеспечивающего создание файла (и тем самым устраняющего ошибку, возникающую при попытке открыть несуществующий файл) в случае, если открываемого для добавления файла на диске еще нет.

Рис. 7.4. Алгоритм открытия файла с обработкой возможной ошибки

Ниже приведен фрагмент программы, реализующий приведенный выше алгоритм открытия файла.

AssignFile(f,filename);

{$I-} // запрещает автоматическую обработку ошибок ввода/вывода.

Append(f) // открыть для добавления

{$I+} // восстанавливает режим автоматической обработки ошибок ввода/вывода.

if IOResult<>0 //контроль за результатом выполнения инструкции открытия файла

then Rewrite(f); // открыть для записи

// здесь открыт существующий или новый файл

Закрытие файла

Closefile(f).

Пример программы

Следующая программа ведет простую базу данных. При каждом ее запуске на экране появляется диалоговое окно (рис. 7.5), в поля которого пользователь может ввести дату и температуру воздуха.

Рис. 7.5. Диалоговое окно программы База данных "Погода"

Дата вводится в поле Edit1, температура — в поле Edit2. Текст программы приведен в листинге 7.3.

Листинг 7.3, Простая база данных (запись в файл)

unit pogoda_;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

Type

TForm1 = class(TForm)

Edit1: TEdit; // дата

Edit2: TEdit; // температура

Button1: TButton; // кнопка Добавить

Label1: TLabe1;

Label2: TLabe1;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private { Private declarations }

public { Public declarations }

end;

var Form1: TForm1;

Implementation

{$R *.dfm}

const DBNAME = 'a:\pogoda.db';

Var

db: TextFile; // файл — база данных

procedure TForm1.FormActivate(Sender: TObject);

Begin

AssignFile(db, DBNAME);

{$I-}

Append(db);

if IOResult = 0 then

Begin

Edit1.Text:= DateToStr(Date); // получить текущую дату

Edit2.SetFocus; // курсор в поле Edit2

End

Else begin

Rewrite(db);

if IOResult <> 0 then begin

// сделать недоступными поля ввода и командную кнопку

Edit1.Enabled:= False; Edit2.Enabled:= False;

Button1.Enab1ed:= False;

ShowMessage('Ошибка создания '+DBNAME);

end;

end;

end;

// щелчок на кнопке Добавить

procedure TForm1.Button1Click(Sender: TObject);

Begin

if (Length(edit1.text)=0) or (Length(edit2.text)=0)

then ShowMessage('Ошибка ввода данных.'+#13

+'Bce поля должны быть заполнены.')

else writeln(db, editl.text,' ',edit2.text);

end;

// Событие OnClose возникает при закрытии формы

procedure TForm1.FormClose(Sender:TObject;

var Action: TCloseAction);

Begin

CloseFile(db); // закрыть файл БД

end;

End.

После нескольких запусков программы файл pogoda.db может быть, например, таким:

9.05.2001 10 10.05.2001 12 11.05.2001 10 12.05.2001 7

Ввод из файла

TextFile

AssignFile

read или readln.

Открытие файла

Reset,

AssignFile(f, 'c:\data.txt'); Reset(f);

IOResult.

Фрагмент программы, текст которого приведен в листинге 7.4, использует значение функции lOResult для проверки результата открытия файла. Если попытка открыть файл вызывает ошибку, то программа выводит диалоговое окно с сообщением об ошибке и запросом на подтверждение повторного открытия файла.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: