Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
В Примере 1 приведена процедура, которая запускается нажатием командной кнопки Записать. Она открывает файл в режиме создания нового или замещения существующего файла и записывает текст, находящийся в поле компонента Memo1.
Имя файла нужно ввести во время работы в поле Edit1. Можно задать предопределенное имя файла во время разработки формы приложения. Для этого надо присвоить значение, например test. txt, свойству Edit1.Text.
Пример 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('Данные ЗАПИСАНЫ в файл',mt Information, [mbOk],0);
end;
В Примере 2 приведена процедура, которая запускается нажатием командной кнопки Добавить. Она открывает файл, имя которого указано в поле Edit1, и добавляет в него содержимое поля Memo1.
Пример 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;
1.5.Ошибки открытия файла
Попытка открыть файл может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин неудачи открытия файлов может быть несколько. Например, программа попытается открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя или диск не вставлен в накопитель). Другая причина — отсутствие открываемого в режиме добавления файла (файла нет — добавлять некуда).
![]() |
При запуске программы из Delphi в случае ошибки во время открытия файла возникает исключение, и на экране появляется диалоговое окно с сообщением (рис. 2).
Рис. 2. Пример сообщения об ошибке открытия файла (запуск из Delphi)
Если программа запускается из Windows, то окно с сообщением об ошибке выглядит иначе (рис. 3).
![]() |
Рис. 3. Пример сообщения об ошибке открытия файла (запуск из Windows)
Программа может взять на себя задачу контроля за результатом выполнения инструкции открытия файла. Сделать это можно, проверив значение функции IOResult. (input-output Result — результат ввода-вывода). Функция IOResult возвращает 0, если операция ввода-вывода завершилась успешно; в противном случае — код ошибки (не ноль).
Для того чтобы программа смогла проверить результат выполнения операции ввода/вывода, нужно разрешить ей это делать. Для этого надо перед инструкцией вызова процедуры открытия файла поместить директиву компилятору — строку {$I-}, которая запрещает автоматическую обработку ошибок ввода/вывода. Эта директива сообщает компилятору, что программа берет на себя контроль ошибок. После инструкции открытия файла следует поместить директиву {$I+}, восстанавливающую режим автоматической об работки ошибок ввода/вывода.
Фрагмент программы обработки возможной ошибки открытия файла
AssignFile(f, filename);
{$I-}
Append(f); // открыть для добавления
{$I+}
if IOResult <> 0 // ошибка открытия
then Rewrite (f) ; // открытие файла для записи
1.6.Закрытие файла
Перед завершением работы программа должна закрыть все открытые файлы. Это делается вызовом процедуры close. Процедура close имеет один параметр — имя файловой переменной. Пример использования процедуры:
Close(f).
1.7.Простая база данных
Следующая программа ведет простую базу данных. При каждом ее запуске на
экране появляется диалоговое окно (рис. 4), в поля которого пользователь может ввести дату и температуру воздуха.


Рис. 4. Диалоговое окно программы База данных "Погода"
Дата вводится в поле Edit1, температура — в поле Edit2. Текст программы приведен в Примере 3.
Пример 3. Текст программного модуля
unit pogoda_;
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.Enabled := False;
ShowMessage('Ошибка создания '+DBNAME);
end;
end;
end;
// щелчок на кнопке Добавить
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Length(editl. text)=0) or (Length(edit2.text)=0)
then ShowMessage(‘Ошибка ввода данных.'+#13+'Все поля
должны быть заполнены.')
else writeln(db, edit1.text,' ', edit2.text);
end;
// Событие OnClose возникает при закрытии формы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(db); // закрыть файл БД
end;
end.
Файл базы данных открывает процедура FormActivate, которая обрабатывает событие OnActivate. Событие OnActivate возникает в момент активизации формы, поэтому процедура запускается автоматически, при активизации формы приложения. Если операция открытия файла завершается успешно, то в поле Edit1 записывается текущая дата. Информация о текущей дате возвращает функция Date. Для преобразования возвращаемого функцией Date значения (числа типа Double) в удобную для восприятия форму используется функция DateToStr. После записи даты в поле Edit1 процедура обработки события OnActivate с применением метода SetFocus устанавливает курсор в поле ввода температуры. Если в процессе открытия или создания нового файла возникает ошибка, то процедура делает недоступной кнопку Добавить и выводит информационное сообщение.
Процедура TForm1.Button1Click (процедура обработки события OnClick) запускается нажатием кнопки Добавить (Button1). В результате введенная информация записывается в базу данных — файл pogoda. db. Перед выполнением записи программа проверяет, все ли поля формы заполнены, и, если не все, то выводит информационное сообщение.
В результате работы процедуры в конец файла pogoda. db будет добавлена строка, содержащая дату (число, месяц, год) и температуру.
В данной программе используется инструкция writeln, а не write, для того чтобы данные за каждый день располагались в базе данных на отдельной строке.
Закрывает базу данных процедура TForm1.FormClose, которая обрабатывает событие OnClose, возникающее при закрытии формы приложения.
После нескольких запусков программы файл pogoda. db может быть, например, таким;
9.05.2001 10
10.05.2001 12
11.05.2001 10
12.05.2001 7
2.Ввод из файла
Программа может вводить исходные данные не только с клавиатуры, но и из текстового файла. Для того чтобы воспользоваться этой возможностью, нужно объявить файловую переменную типа TextFile, назначить ей при помощи инструкции AssignFile имя файла, из которого будут считываться данные, открыть файл для чтения (ввода) и прочитать (ввести) данные, используя инструкцию read или readln.
2.1.Открытие файла
Открытие файла для ввода (чтения) выполняется вызовом процедуры Reset, имеющей один параметр — файловую переменную. Перед вызовом процедуры Reset с помощью функции AssignFile файловая переменная должна быть связана с конкретным файлом.
Например, следующие инструкции открывают файл для ввода:
AssignFile(f, 'c:\data. txt');
Reset(f);
Если имя файла указано неверно, например файла с указанным именем на диске нет, то возникает ошибка времени выполнения программы.
Поэтому в программе следует предусмотреть возможность повторной попытки открытия файла после подтверждения повторения операции.
Как и при открытии файла для записи, программа может взять на себя задачу обработки возможной ошибки при открытии файла, проверяя значение функции IOResult.
Фрагмент программы, текст которого приведен в примере 4, использует значение функции IOResult для проверки результата открытия файла. Если попытка открыть файл вызывает ошибку, то программа выводит диалоговое окно с сообщением об ошибке и запросом на подтверждение повторного открытия файла.
Пример 4. Обработка ошибки открытия файла (фрагмент программы)
var
fname : string[80];
f : TextFile; // текстовый файл
res : integer; // значение IOResult
answ : word; // ответ пользователя
begin
fname := 'a;\test. txt';
AssignFile(f, fname);
Repeat
{$I-}
Reset(f); // открыть файл для чтения
{$I+}
res:=IOResult;
if res <>0
then answ:=MessageDlg('Ошибка открытия '+fname+#13
+'Повторить попытку?',mtWarning,
[mbYes, mbNo],0);
until (res= 0) or (answ = mrNo);
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |




