Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Файлы типа Text




End.

End

While NOT Eof(F1) do begin

Begin

Reset(F1);Rewrite(F2);

F2^:=F1^;

Get(F1);Put(F2)

Для большего удобства работы с файлами в Паскале предусмотрены процедура ввода Read и процедура вывода Write.

<процедура ввода>::="Read" "("<файловая переменная> "," <переменная> {"," <переменная>} ")".

<процедура вывода>::="Write" "("<файловая переменная> "," <выражение> {"," <выражение>} ")".

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

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

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

Пусть нужно ввести данные из файла, связанного с файловой переменной F1 в 3 переменных: A, B и C. Используя элементарные операции, это можно сделать следующим образом:

Reset(F1);

A:=F1^; Get(F1);

B:=F1^; Get(F1);

C:=F1^; Get(F1);

Используя процедуру Read те же действия можно выполнить следующим образом:

Reset(F1);

Read(F1,A,B,C);

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

В стандартном Паскале не предусмотрена процедура закрытия файла. Однако в большинстве реализаций файл, по окончании работы с ним, нужно закрывать. Для этого в них предусмотрена процедура Close. Например:

Close(F2);

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

В некоторых реализациях, например, в Turbo Pascal, процедуры элементарного ввода-вывода Put и Get отсутствуют.

Следует учитывать, что при выводе данных в файлы и при вводе из файлов информация никаким образом не преобразуется – обмен данными производится во внутреннем представлении компьютера. Также в записанном файле не хранится информация о его типе. Если был записан файл с базовым типом Real, его можно прочитать как файл с базовым типом Integer, однако данные при этом будут совершенно искажены, так как внутреннее представление различно для разных типов данных. Обеспечение соответствия вводимых данных сохраненным данным возлагается на программиста.

В Паскале предусмотрен предопределенный файловый тип Text. Его описание могло бы выглядеть так:

Type Text=File of Char;

Это описание в программе делать не надо, так как оно уже неявно присутствует. Поэтому вместо

Var f:File of Char;

можно написать эквивалентное описание

Var f:Text;

Для файлов типа Text определены все процедуры и функции, определенные для файлов других типов, и работают они также. Но есть важное отличие. В процедуре Read могут быть переменные разных типов, а именно, Char, Integer, Real и диапазонов на Char и Integer. В процедуре Write могут быть выражения типов Char, Integer, Real, Boolean, диапазонов на Char и Integer и строковых констант. Однако все типы, кроме типа Char и строковых констант, при выводе преобразуются во внешнее представление, то есть, в формат, предусмотренный для вывода данных на дисплей или принтер. А при вводе данные преобразуются во внутреннее представление.

То есть, эти процедуры похожи на процедуры Read и Write, предназначенные для стандартного ввода-вывода. Так же, как для стандартного ввода-вывода определены процедуры Readln и Writeln. Единственное отличие – первым фактическим параметром этих четырех процедур должна быть файловая переменная, связанная с соответствующим текстовым файлом на диске.

Так же, как в стандартном вводе-выводе, после каждого элемента вывода можно указывать формат вывода.

Так же, как в стандартном вводе-выводе, предусмотрена функция Eoln для проверки достижения конца текущей строки ввода. При вызове этой функции должен быть указан формальный параметр – файловая переменная, например, Eoln(F). Функция возвращает значение True, если операция ввода завершилась в конце строки.

Так же, как в стандартном вводе-выводе, при выводе элементы данных никак не отделяются друг от друга, поэтому программист должен предусмотреть вставку пробелов либо подходящие форматы. А при вводе элементы данных типа Char, Integer, Real и диапазонов на Char и Integer, должны быть разделены пробелами.

 




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 251; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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