
- •Внешние файлы
- •7.1Цель работы
- •7.2Задание
- •7.3Теоретические сведения
- •Структура физического файла
- •Структура логических файлов
- •Доступ к файлу, операции с файлами
- •Установка связи
- •Инициация файла
- •Процедуры чтения-записи
- •Закрытие доступа к файлу
- •Вспомогательные функции
- •Компоненты категории Dialogs
- •Основные свойства и методы tOpenDialog и tSaveDialog
- •Обработка типизованных файлов
- •Пример 1. Запись массива в типизованный файл
- •Пример 2. Запись в файл с использованием диалога
- •Пример 3. Чтение из типизованного файла
- •Пример 4. Чтение из типизованного файла с контролем ошибок
- •Обработка текстовых файлов Пример 5. Запись в тестовый файл
- •Пример 6. Добавление записей в конец тестового файла
- •Пример 7. Обработка текстового файла
- •Нетипизованные файлы
- •7.4Содержание отчета
- •7.5Контрольные вопросы
Пример 3. Чтение из типизованного файла
Дано: типизованный файл D:\Stud\FM.Dat, содержащий массив вещественных чисел; количество элементов массива не известно.
Требуется:
определить размер N массива файла D:\Stud\FM.Dat;
определить динамический массив М;
элементам массива М присвоить значения элементов массива файла FM.Dat;
массив М распечатать в Label1.
В разделе implementation описаны:
Type Mas = Array of real;
Var M: Mas; //массив
F : File of real; //файловая переменная
………………………
{текст процедуры обработки события, например “Нажатие кнопки”}
Var i, N: Byte;
//i - счётчик, N – размер массива, количество элементов в файле
Begin
If OpenDialog1.Execute {окно «Открытие документа», открываем D:\Stud\FM.Dat}
then begin
AssignFile(F, OpenDialog1.FileName); {Устанавливает связь между F и выбранным в диалоге файлом }
Reset(F); //Направление передачи данных – чтение
end; //конец диалога
N := FileSize(F); //количество элементов в файле и в массиве
SetLength(M, N-1) ; //задаём длину массива, счёт от 0
Label1.Caption := ‘’; //очищаем метку вывода
For i := 0 to N-1 do
begin
read(F, M[i]); //считан элемент из файла, значение присвоено M[i]
Label1.Caption := Label1.Caption+FloatToStr(M[i])+' '#13;
//вывод iэлемента массива
end; //конец цикла
………………..
Пример 4. Чтение из типизованного файла с контролем ошибок
При попытке открыть файл для чтения может возникнуть ошибка, например, из-за несоответствия типов файловой переменной и типизованного файла. Отключим контроль ошибок ввода-вывода {$I-} и воспользуемся функцией IOResult: Integer, возвращающей код ошибки после включёния контроля ошибок {$I+}.
Дополним рассмотренный ранее пример 3 контролем ошибок доступа к файлу. Дополнения выделены курсивом.
В разделе implementation описаны:
Type Mas = Array of real;
Var M: Mas; //массив
F : File of real; //файловая переменная
{В свойство Title введено: “Открытие файла данных”}
………………………
{текст процедуры обработки события, например “Нажатие кнопки”}
Var i, N: Byte;
//i - счётчик, N – размер массива, количество элементов в файле
Begin
If OpenDialog1.Execute //открыть диалог для поиска файла
then begin
AssignFile(F, OpenDialog1.FileName);
{$I-} //компилятору отключить контроль ввода-вывода
Reset(F); //Направление передачи данных – чтение
{$I+} //компилятору включить контроль ввода-вывода
end; //конец диалога
if IOResult = 0
then begin //доступ к файлу FileName открыт
SHowMessage( 'Открыт '+OpenDialog1.FileName + #13+
'Размер '+ IntToStr(FileSize(F)));
end
else begin
SHowMessage( 'код ошибки доступа '+ IntToStr(IOResult) );
CloseFile(F);
exit; //досрочное завершение процедуры
end;
N := FileSize(F); //количество элементов в файле и в массиве
SetLength(M, N-1) ; //задаём длину массива, счёт от 0
Label1.Caption := ‘’; //очищаем метку вывода
For i := 0 to N-1 do
begin
read(F, M[i]); //считан элемент из файла, значение присвоено M[i]
Label1.Caption := Label1.Caption+FloatToStr(M[i])+' '#13; //вывод
end; //конец цикла
………………..