Главная » Статьи » Програмирование » Pascal

Файлы

Добавил: swich e-mail от 30.11.2010, просмотров: 1210

Введение файлового типа в язык Паскаль вызвано необходимостьюобеспечить возможность работы с периферийными (внешними) устройствамиЭВМ, предназначенными для ввода, вывода и хранения данных.Файловый тип данных или файл определяет упорядоченную совокупностьпроизвольного числа однотипных компонент.

Понятие файла достаточно широко. Это может быть обычный файл надиске, коммуникационный порт ЭВМ, устройство печати, клавиатура илидругие устройства.

При работе с файлами выполняются операции ввода - вывода. Операцияввода означает перепись данных с внешнего устройства (из входногофайла) в основную память ЭВМ, операция вывода - это пересылка данныхиз основной памяти на внешнее устройство (в выходной файл).

Файлы на внешних устройствах часто называют физическими файлами.Их имена определяются операционной системой. В программах на языкеПаскаль имена файлов задаются с помощью строк. Например, имя файла надиске может иметь вид:

'LAB1.DAT''c:\ABC150\pr.txt''my_files'

Типы файлов Турбо Паскаль

Турбо Паскаль поддерживает три файловых типа:

Доступ к файлу в программе происходит с помощью переменныхфайлового типа. Переменную файлового типа описывают одним изтрех способов:

file of тип - типизированный файл (указан тип компоненты);
text - текстовый файл;
file - нетипизированный файл.

Примеры описания файловых переменных:

var f1: file of char; f2: file of integer; f3: file; t: text;

Стандартные процедуры и функции

Любые дисковые файлы становятся доступными программе после связывания ихс файловой переменной, объявленной в программе. Все операции в программе производятся только с помощью связанной с ним файловой переменной.

Assign(f, FileName)
связывает файловую переменную f с физическим файлом, полное имя которого задано в строкеFileName. Установленная связь будет действовать до конца работы программы, или до тех пор, пока не будет сделано переназначение.

После связи файловой переменной с дисковым именем файла в программенужно указать направление передачи данных (открыть файл). В зависимости от этого направления говорят о чтении из файла или записи в файл.

Reset(f)
открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента. Процедура завершается с сообщением об ошибке, если указанный файл не найден.

Если f - типизированный файл, то процедурой reset он открывается длячтения и записи одновременно.

Rewrite(f)
открывает для записи файл, с которым связана файловая переменная f. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Если указанный файл ужесуществовал, то все данные из него уничтожаются.

Close(f)
закрывает открытый до этого файл с файловой переменной f. Вызов процедуры Close необходим при завершении работы с файлом. Если по какой-то причине процедура Close не будет выполнена, файл все-же будет создан на внешнем устройстве, но содержимое последнегобуфера в него не будет перенесено.

EOF(f): boolean
возвращает значение TRUE,когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст.

Rename(f, NewName)
позволяет переименоватьфизический файл на диске, связанный с файловой переменной f. Переименование возможно после закрытия файла.

Erase(f)
уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.

IOResult
возвращает целое число, соответствующеекоду последней ошибки ввода - вывода. При нормальном завершении операции функция вернет значение 0. Значение функции IOResult необходимоприсваивать какой-либо переменной, так как при каждом вызове функция обнуляет свое значение. Функция IOResult работает только при выключенном режиме проверок ошибок ввода - вывода или с ключом компиляции {$I-}.

Работа с типизированными файлами

Типизированный файл - это последовательность компонент любого заданноготипа (кроме типа "файл"). Доступ к компонентам файла осуществляется поих порядковым номерам. Компоненты нумеруются, начиная с 0. Послеоткрытия файла указатель (номер текущей компоненты) стоит в его начале на нулевом компоненте. После каждого чтения или записи указатель сдвигается к следующему компоненту.

Запись в файл:

Write(f, список переменных);

Процедура записывает в файл f всю информацию из списка переменных.

Чтение из файла:

Read(f, список переменных);

Процедура читает из файла f компоненты в указанные переменные. Тип файловыхкомпонент и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы. Необходимо либо точно рассчитывать количество компонент, либо перед каждым чтением данных делать проверку их существования (функция eof, см. выше)

Смещение указателя файла:

Seek(f, n);

Процедура смещает указатель файла f на n-ную позицию. Нумерация в файле начинается с 0.

Определение количества компонент:

FileSize(f): longint;

Функция возвращает количество компонент в файле f.

Определение позиции указателя:

FilePos(f): longint;

Функция возвращает порядковый номер текущего компонента файла f.

Отсечение последних компонент файла:

Truncate(f);

Процедура отсекает конец файла, начиная с текущей позиции включительно.

Работа с текстовыми файлами

Текстовый файл - это совокупность строк, разделенных метками конца строки.Сам файл заканчивается меткой конца файла. Доступ к каждой строке возможенлишь последовательно, начиная с первой. Одновременная запись и чтение запрещены.

Чтение из текстового файла:

Read(f, список переменных);ReadLn(f, список переменных);

Процедуры читают информацию из файла f в переменные. Способ чтения зависитот типа переменных, стоящих в списке. В переменную char помещаются символы из файла. В числовую переменную: пропускаются символы-разделители, начальные пробелыи считывается значение числа до появления следующего разделителя. В переменную типа string помещается количество символов, равное длине строки, но тольков том случае, если раньше не встретились символы конца строки или конца файла.Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются всеоставшиеся символы в данной строке, включая метку конца строки. Если списокпеременных отсутствует, то процедура ReadLn(f) пропускает строку при чтениитекстового файла.

Запись в текстовый файл:

Write(f, список переменных);WriteLn(f, список переменных);

Процедуры записывают информацию в текстовый файл. Способ записи зависит от типа переменных в списке (как и при выводе на экран). Учитывается формат вывода.WriteLn от Write отличается тем, что после записи всех значений из переменныхзаписывает еще и метку конца строки (формируется законченная строка файла).

Добавление информации к концу файла:

Append(f)

Процедура открывает текстовый файл для добавления информации к его концу.Используйте эту процедуру вместо Rewrite.

Работа с нетипизированными файлами

Нетипизированные файлы - это последовательность компонент произвольного типа.

Открытие нетипизированного файла:

Reset(f, BufSize)Rewrite(f, BufSize)

Параметр BufSize задает число байтов, считываемых из файла или записываемых в него за одно обращение. Минимальное значение BufSize - 1байт, максимальное - 64 К байт. Если BufSize не указан, то по умолчаниюон принимается равным 128.

Чтение данных из нетипизированного файла:

BlockRead(f, X, Count, QuantBlock);

Эта процедура осуществляет за одно обращение чтение в переменную Xколичества блоков, заданное параметром Count, при этом длина блокаравна длине буфера. Значение Count не может быть меньше 1. За однообращение нельзя прочесть больше, чем 64 К байтов.

Необязательный параметр QuantBlock возвращает число блоков, прочитанных текущей операцией BlockRead. В случае успешного завершения операции чтения QuantBlock = Count, в случае аварийной ситуации параметр QuantBlock будет содержать число удачно прочитанныхблоков. Отсюда следует, что с помощью параметра QuantBlock можноконтролировать правильность выполнения операции чтения.

Запись данных в нетипизированный файл:

BlockWrite(f, X, Count, QuantBlock);

Эта процедура осуществляет за одно обращение запись из переменной X количества блоков, заданное параметром Count, при этом длина блока равнадлине буфера.

Необязательный параметр QuantBlock возвращает число блоков, записанных успешно текущей операцией BlockWrite.

Для нетипизированных файлов можно использовать процедуры Seek, FIlePos иFileSize, аналогично соответствующим процедурам типизированных файлов.

Добавлено в: Pascal
Смотрите так же:
⇒ Интересное про самолеты
⇒ Отказы англоязычных редакций и агентов
⇒ Пошлые пословицы и поговорки
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]