Все файлы принято подразделять на физические и логические. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Все файлы принято подразделять на физические и логические.



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

Физический файл - это файл, который уже определен и обозначен конкретной операционной системой по определенным правилам. Ему присвоено имя и местоположение на внешнем устройстве.

Способ работы с тем или иным файлом зависит и от его вида. На внешнем носители различаются следующие файлы: последовательные, файлы прямого доступа и текстовые (или символьные) файлы. Правильное определение вида, как и типа файла способствует более быстрому освоению навыков работы с языком Паскаль.

10. Наиболее часто приходится иметь дело с текстовым представлением информации, поэтому рассмотрим запись и чтение текстового файла.Приступая к работе с файлом, нужно первым делом вызвать процедуру AssignFile, чтобы файловой переменной поставить в соответствие имя файла на диске:AssignFile(F, 'MyFile.txt').В результате этого действия поля файловой переменной F инициализируются начальными значениями. При этом в поле имени файла заносится строка 'MyFile.txt'.Так как файла еще нет на диске, его нужно создать:Rewrite(F);Теперь запишем в файл несколько строк текста. Это делается с помощью хорошо вам знакомых процедур Write и Writeln:Writeln(F, 'Pi = ', Pi).Writeln(F, 'Exp = ', Exp(1)).При работе с файлами первый параметр этих процедур показывает, куда происходит вывод данных.После работы файл должен быть закрыт:CloseFile(F).Рассмотрим теперь, как прочитать содержимое текстового файла. После инициализации файловой переменной (AssignFile) файл открывается с помощью процедуры Reset:Reset(F).Для чтения элементов используются процедуры Read и Readln, в которых первый параметр показывает, откуда происходит ввод данных. После работы файл закрывается. В качестве примера приведем программу, распечатывающую в своем окне содержимое текстового файла 'MyFile.txt':program Console;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

F: TextFile;

S: string;

Begin

AssignFile(F, 'MyFile.txt');

Reset(F);

While not Eof(F) do

Begin

Readln(F, S);

Writeln(S);

end;

CloseFile(F);

Writeln('Press Enter to exit...');

Readln;

End.

Так как обычно размер файла заранее не известен, перед каждой операцией чтения вызывается функция Eof, которая возвращает True, если достигнут конец файла.Внимание! Текстовые файлы можно открывать только для записи или только для чтения, но не для того и другого одновременно. Для того чтобы сначала записать текстовый файл, а потом прочитать, его нужно закрыть после записи и снова открыть, но уже только для чтения.

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

type t = record

id11, id12, …: type1;

id21, id22, …: type2;

……………….

end;

Здесь id – идентификаторы полей; type – типы полей; t – имя типа.

Пример. Данные комплексного вида можно описать переменной типа record.

type complex = record

Re, im: real

end;

var c: complex;

Здесь complex – имя типа, а c – имя переменной. Переменная c состоит из двух полей: re и im, имеющих один и тот же тип (real). Эти поля переменной c обозначаются как c.re и c.im.

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

type date = record

month: 1..12;

day: 1..31;

Year: integer

end;

var d: date;

В этом примере описан тип date и переменная d, принадлежащая этому типу. Переменная d описана как запись, состоящая из трех полей: month, day и year. Каждое поле содержит соответственно данные: целое число в пределах от 1 до 12 (номер месяца), целое число от 1 до 31 (число), целое число (год). Поле day переменной d записывается как d.day. Например, чтобы заслать в d дату 12.01.2003, надо выполнить следующие операторы:

d.month:= 1;

d.day:= 12;

d.year:= 2003;

Пример. Вычислить сумму s двух комплексных чисел x = 2 + 7i и y = 6 + 3i (т.е. x, y, s: complex;).

x.re:= 2.0; x.im:= 7.0;

y.re:= 6.0; y.im:= 3.0;

s.re:= x.re + y.re;

s.im:= x.im + y.im;

Запись может быть компонентой других структур. Например, введем тип family (семья: отец, мать, 1-й ребенок, 2-й ребенок):

type family = (father, mother, child1, child2);

var birthday: array[family] of date; где date – описанная выше запись.Переменная birthday есть массив, состоящий из записей – дат рождения членов семьи: отца, матери, 1-го ребенка, 2-го ребенка. Каждая дата рождения имеет тип date, который может быть описан в программе.Для занесения даты рождения, например, mother, достаточно выполнить операторы:

birthday[mother].month:= 5;

birthday[mother].day:= 1;

birthday[mother].year:= 1965;

12. Для внешних файлов определены два сорта доступа: последовательный доступ и прямой доступ. В настраиваемых пакетах SEQUENTIAL_IO и DIRECT_IO описаны соответствующие файловые типы и связанные с ними операции. Объект файлового типа, используемый для последовательного доступа, называется последовательным файлом, а используемый для прямого доступа — прямым файлом.

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

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

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

Для прямых файлов допустимы все три вида файла. Для последовательных файлов допустимы только виды IN_FILE и OUT_FILE.

Ссылки: вид файла 14.1, тип 14.3, файл вида IN_FILE 14.1, файл вида OUT_FILE 14.1.

УПРАВЛЕНИЕ ФАЙЛАМИ

В этом разделе описаны процедуры и функции, предназначенные для управления внешними файлами; их описания повторены в каждом из трех пакетов последовательного, прямого и текстового ввода-вывода. Процедуры CREATE, OPEN и RESET при вводе-выводе текстовимеют дополнительные эффекты, описанные в разд. 14,3.1.

procedure OPEN(FILE: in out FILE_TYPE; MODE: in FILE_MODE; NAME: in STRING; FORM: in STRING:= "");

Устанавливает новый внешний файл с данным именем и формой и связывает его с данным файлом (FILE). После этого данный файл открывается. Текущий вид файла устанавливается в заданный вид доступа (MODE). По умолчанию для последовательного и текстового ввода-вывода устанавливается вид OUT_FILE, а для прямого ввода-вывода — INOUT_FILE. Для прямого доступа размер созданного файла зависит от реализации. Пустая строка под именем (NAME) задает внешний файл, который не доступен после окончания главной программы (временный файл). Пустая строка для формы (FORM) задает параметры по умолчанию, определяемые реализацией для внешнего файла.

Если данный файл уже открыт, то возбуждается исключение STATUS_ERROR. Если указанная в качестве параметра NAME строка не допускает идентификацию внешнего файла, то возбуждается исключение NAME_ERROR. Если для заданного вида файла окружение не может обеспечить создание внешнего файла с заданными именем и формой, то возбуждается исключение USE_ERROR (в отсутствие возбуждения исключения NAME_ERROR).

procedure CREATE(FILE: in out FILE_TYPE; MODE in FILE_MODE:=вид по умолчанию; NAME in STRING:= ""; FORM in STRING:= "");



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 141; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.251.68 (0.007 с.)