русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

While not EOF(f) do


Дата добавления: 2013-12-23; просмотров: 1931; Нарушение авторских прав


Порядковый номер компоненты файла (типа Longint), которая будет обрабатываться следующей операцией ввода–вывода, возвращает функция FilePos(<ф.п.>).

End.

Else

IfIOResult <> 0 then

Begin

Var

Type

product = record

name : string;

code : word;

cost : real

end;

f1 : file ofproduct;

f2 : file ofinteger;

f3 : file ofbyte;

 

В последнем примере определены три файловые переменные – f1, f2, f3, соответствующие файлу из записей типа product, файлу из целых чисел и файлу из байтов. Вид файла, вообще говоря, определяет способ хранения информации в нем. Однако в Турбо Паскале нет средств контроля формата ранее созданных файлов. Поэтому, объявив, например, file ofbyte, можно работать с любым дисковым файлом, в том числе графическим изображением. При этом программист должен знать фактическую структуру файла. Типизированные файлы состоят из компонент одного и того же типа, к которым возможен прямой доступ по номеру компоненты. Нумерация компонент (записей) начинается с нуля. Данные в типизированных файлах хранятся во внутреннем машинном представлении.

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

Assign(<ф.п.>, <имя файла или логического устройства>);

 

где <ф.п.> – файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа);

<имя файла или логического устройства> – переменная типа string или текстовое выражение, содержащее имя файла или логического устройства.

Имя файла – это любое выражение строкового типа, которое строится по правилам определения имен в MS DOS и может содержать имя (до 8 символов), расширение и полный путь к файлу (всего до 79 символов). Если путь к файлу не указан, файл должен располагаться в текущем (рабочем) каталоге, где находится исполняемый EXE-модуль программы.



В процедуре Assign вместо имени файла можно указывать имя логического устройства: CON – консоль, клавиатура или экран дисплея; PRN – принтер; NUL – «пустое» устройство ( приемник информации неограниченной емкости, который фактически ничего не делает). На логические устройства можно передавать только текстовую информацию.

Примеры использования процедуры Assign приведены ниже.

 

Assign(f1,’prod.dat’);

Assign(f2,’D:\RAB\TST\fil1.int’);

name := ’fff.doc’;

Assign(f3,name);

 

Основные операции, которые проводятся с файлами – это ввод и вывод данных. Для того чтобы осуществлять такие операции, файл нужно инициировать (открыть). Типизированные файлы можно открыть в двух режимах: для записи (режим создания) и для чтения и записи одновременно.

Для чтения и модификации файл открывается с помощью стандартной процедуры Reset, имеющей следующий формат:

 

Reset(<ф.п.>);

 

где <ф.п.> - файловая переменная, предварительно связанная с существующим файлом.

При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная (указатель файла) будет определять начало файла, т.е. компоненту с номером 0. Если файл с указанным именем не существует, возникнет ошибка периода исполнения и программа аварийно завершит работу. Для того чтобы этого избежать, используется специальная функция IOResult, возвращающая значение 0, если открытие прошло успешно, и код ошибки в противном случае. Функция IOResult становится доступной только при отключении автоматического контроля ошибок ввода-вывода с помощью директивы компилятора {$I-}. Например, проверить, существует ли файл на диске, можно с помощью следующего фрагмента программы:

 

varf: file ofchar;

Assign(f,’test.dat’);

{$I-} { отключение контроля ошибок ввода-вывода }

Reset(f);

{$I+} { включение контроля ошибок ввода-вывода }

. . . { файл не существует }

. . . { файл существует }

Стандартная процедура

 

Rewrite(<ф.п.>);

 

создает новый файл, связанный с файловой переменной <ф.п.>,и открывает его для записи информации. Если процедура применяется к существующему дисковому файлу, то его содержимое стирается и никаких сообщений в программу не передается. Новый файл подготавливается к приему информации, указатель файла принимает значение 0.

 

Чтение данных из типизированного файла, открытого процедурой Reset, осуществляется процедурой Read, которая имеет следующий формат:

 

Read(<ф.п.>, <список ввода>);

 

где <список ввода> – список ввода, содержащий одну или несколько переменных того же типа, что и компоненты файла.

Чтение данных начинается с текущего значения указателя файла. После выполнения процедуры указатель файла увеличивается в соответствии с количеством элементов в списке ввода.

Запись данных в типизированный файл осуществляется процедурой Write, имеющей следующий формат:

 

Write(<ф.п.>, <список вывода>);

 

Здесь <список вывода> – список вывода, содержащий одно или более выражений того же типа, что и компоненты файла. После выполнения процедуры указатель файла изменяется в соответствии с длиной списка вывода.

Позиционирование указателя файла на компоненту с требуемым номером выполняется процедурой Seek, имеющей следующий формат:

 

Seek(<ф.п.>, <номер компоненты>);

 

Здесь <номер компоненты> – выражение типа Longint, определяющее номер компоненты файла, с которого будет начинаться следующая операция ввода или вывода. Нумерация записей в файле начинается с 0, а не с 1 (!).

Размер типизированного файла, т.е. количество компонент в нем, возвращает функция Filesize(<ф.п.>), имеющая тип Longint.

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

 

EOF(<ф.п.>) : boolean,

 

которая возвращает значение true, если файловый указатель стоит в конце файла.

Типовая схема чтения существующего файла имеет следующий вид:

 

Reset(f); { открытие файла }



<== предыдущая лекция | следующая лекция ==>
Под файлом в Турбо Паскале понимается либо поименованная область внешней памяти компьютера (жесткого диска или дискеты), либо логическое устройство (например, принтер). | While notEOF(f) do


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.