Новости

Структурированные типы данных. Файлы и их типы. Типизированные файлы. Основные процедуры и функции работы с типизированными файлами. Текстовые файлы

Работа добавлена:






Структурированные типы данных. Файлы и их типы. Типизированные файлы. Основные процедуры и функции работы с типизированными файлами. Текстовые файлы на http://mirrorref.ru

13. Структурированные типы данных. Файлы и их типы. Типизированные файлы. Основные процедуры и функции работы с типизированными файлами. Текстовые файлы.

Файлы и их типы.

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

Файлы позволяют решить две проблемы:

1) возможность формирования и сохранения значений для последующего использования   другими   программами   (например,   в   программах многократной обработки информационных систем, таких как платежные ведомости, различные АСУ,базы данных, необходимость длительного хранения информации очевидна);

2) взаимодействие программ с внешними устройствами ввода-вывода: дисплеем, принтером, АСП и т.п.

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

В Паскале определенытри типа файлов:

  • текстовые файлы (Text);
  • типизированные или компонентные файлы (File Of <тип компонентов>);
  • нетипизированные или бестиповые файлы (File).

Файловый тип данных в программе задается следующем образом:

type  <имя  файлового  типа> =fileof  <тип  компонентов>

В качестве типа компонентов файла разрешается использовать любой тип данных, кроме файлового.

Типизированные файлы.

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

Для работы с типизированным файлом необходимо объявить файловую переменную (логический файл):

Var <имя файловой переменной> : File Of <тип компонентов>;

Например:

Var Fv3 : File Of Real;           {Объявление файла вещественных чисел}

Объявление файловой переменной для более сложной, а потому и более распространённой ситуации может выглядеть иначе:

Type <имя типа> = <тип компонентов>;

Var <имя файловой переменной> : File Of <имя типа>;

Например:

Type Pasport = Record {Объявление типа по имениPasport}

Tel :String[6]; {Телефон}

Fam :String[17]; {Фамилия}

NF : String[2]; {Имя и отчество}

Uliza : String[20]; {Название улицы}

Dom : String[4]; {Номер дома}

Kvart :String[4] {Номер квартиры}

end;

Var Fv1 : File Of Pasport; {Объявление файловой переменной (логического файла) абонентов ГТС}

Для обеспечения доступа к существующему файлу, расположенному на внешнем носителе (чаще всего это дискеты, жёсткие магнитные диски или компакт-диски), необходимо связать логический файл (файловую переменную), объявленный в паскаль-программе, с физическим файлом. Для чего в общем случае требуется задать:

имя привода (адрес), в котором установлен диск, содержащий необходимый для работы файл или предназначенный для создания нового файла;

маршрут (путь) - ведущую к файлу последовательность имён обязательно существующих каталогов, разделённых символом “обратный слэш” \;

составное (полное) имя файла.

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

[имя_привода:][маршрут\]составное_имя_файла

В квадратные скобки заключены элементы, присутствие которых необязательно. Если какие-то элементы отсутствуют, то действуют следующие правила:

  • если не указан привод, то используется текущий привод;
  • если не задан маршрут, то считается, что файл содержится в текущем (рабочем) каталоге.

Основные процедуры и функции работы с типизированными файлами.

Процедуры

1. Связывание файлов

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

Assign(имя файловой переменной, имя файла);

При этом имя файла можно задавать как в виде строковой константы, так и в виде строковой переменной. Например:

Assign(Fv1,'Phone_1.dat'); {Связать переменнуюFv1 cфайлом Phone_1.dat}

File_Name:='Tarif.dat'; {Определить значение строковой переменной File_Name}

Assign(Fv3,File_Name); {Связать переменную Fv3 с файлом, имя которого хранится в переменной File_Name}

Связь, установленная с помощью процедурыAssign, сохраняется до её следующего вызова с той же самой файловой переменной.

2. Открытие файлов

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

ReSet(имя файловой переменной);

ReWrite(имя файловой переменной);

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

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

3. Операции ввода-вывода

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

Read(имя файловой переменной, имя буферной переменной);

Write(имя файловой переменной, имя буферной переменной);

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

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

Например:

Read(Fv1, Kart1); {Читать текущую запись из файла Fv1 в переменную Kart1}

Write(Fv2, Kart2); {Вывести содержимое переменной Kart2 в текущую запись файла Fv2}

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

4. Позиционирование в файлах

Переместить указатель (позиционировать) на запись с определённым номером можно с помощью специальной процедуры:

Seek(имя файловой переменной, номер записи);

гденомер записи - константа, переменная или выражение целого типа, содержащее номер записи, которую необходимо сделать текущей. Номер записи должен находиться в допустимых пределах (от0 доn-1, если файл содержитn записей).

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

Необходимо помнить, что после открытия файла (ReSet, ReWrite) текущей является нулевая запись.

5. Усечение файлов

С процедуройSeek связана и процедура

Truncate(имя_файловой_переменной);

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

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

Seek(Fv1,0); {Установить указатель записи в начало файла Fv1}

Truncate(Fv1); {Удалить все записи, начиная с текущей}

Аналогичного результата можно добиться и более простым способом:

ReWrite(Fv1); {Открыть файл Fv1 для записи}

6. Закрытие файлов

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

Close(имя файловой переменной);

которая в файл, открытый для вывода (создаваемый) помещает специальную запись - маркер “конец файла”.

Закрытие не отменяет связи логического файла с физическим (Assign). Попытка закрыть ещё неоткрытый или уже закрытый файл приведёт к прерыванию выполнения программы. Закрытие файлов гарантирует сохранность записываемой в них информации. Закрытие файла (Close) вызывает принудительную очистку буфера ввода-вывода, поэтому и физические сбои (отключение питания, поломка устройства и т.п.) не могут привести к потере информации после закрытия файла.

7. Переименование и удаление файлов

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

Процедура

ReName(имя файловой переменной, новое имя файла);

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

Процедура

Erase(имя файловой переменной);

удаляет (стирает) с внешнего носителя физический файл, связанный с файловой переменной.

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

Функции

Функция логического типаEoF(имя файловой переменной) возвращает значениеTrue (истина), если при чтении достигнут конец файла (указатель находится за последним компонентом), и значениеFalse (ложь) в любой другой ситуации. ЗначениеEoF автоматически обновляется при каждом обращении к процедуре чтения (Read). Эта функция позволяет осуществлять контроль достижения конца файла, и наиболее часто она используется в цикле чтения записей до конца файла. Например:

While not(EoF(Fv1))do begin {Пока не найден конец файла Fv1}

 Read(Fv1, Karta1); {Читать запись из Fv1 в Karta1}

... end;

Целочисленная функцияFileSize(имя файловой переменной) возвращает число, равное реальному количеству записей в файле (оно на единицу больше номера последней записи).

Например:

WriteLn('Файл содержит ',FileSize(Fv1):4,' записей.');

Функция целого типаFilePos(имя файловой переменной) возвращает номер текущей записи файла в диапазоне от нуля доn-1, гдеn - количество компонентов, записанных в файле. Номер реальной записи всегда на единицу больше значения, возвращаемогоFilePos, и лишь когда текущей записью является маркер “конец файла” (EoF возвращает значениеTrue), эта функция возвращает число, равное реальному количеству компонентов в файле (то же, что иFileSize). Например:

WriteLn('Номер текущей записи:', FilePos(Fv1)+1);

If FilePos(Fv1)=FileSize(Fv1) then

WriteLn('Обнаружен конец файла');

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

Текстовые файлы

На практике широко используются текстовые файлы, которые состоят из литерных (логических) строк. Поэтому в языке Паскаль предусмотрен стандартный файловый типTEXT. Логические строки бывают разной длины, в том числе и нулевой. В конец каждой  строки помещается специальный символ «конец строки» (eoln - «endofline»). В качестве печатного символа конца строки используют литеру#. Текстовый файлtext является строго последовательным, к нему не применимы некоторые встроенные функции, в частности,seek. В отличие от типизированных файлов, с текстовым файлом нельзя одновременно проводить операции чтения (read) и записи (write). Однако, допустимы операторыwriteln иreadln. Числовые данные, целые и вещественные, в текстовом файле должны записываться через пробел.

Структурированные типы данных. Файлы и их типы. Типизированные файлы. Основные процедуры и функции работы с типизированными файлами. Текстовые файлы на http://mirrorref.ru


Похожие рефераты, которые будут Вам интерестны.

1. Реферат Типизированные файлы, их назначение и использование. Основные процедуры обработки типизированных файлов

2. Реферат Текстовые файлы. Основные процедуры обработки текстовых файлов

3. Реферат Структурированные типы данных. Строки. Стандартные процедуры и функции работы со строками

4. Реферат Типизированные файлы

5. Реферат Текстовые файлы

6. Реферат Нетипизированные файлы, их назначение и использование. Основные процедуры обработки нетипизированных файлов

7. Реферат Создать файлы матлаб с моделирования работы цеха у каждого свой цех со своим количеством станков станки разные

8. Реферат Экспорт документов PDF в файлы других форматов

9. Реферат Элементы языка Паскаль. Переменные и константы. Типы данных. Порядковые типы. Стандартные типы данных: целый, логический, символьный, вещественный

10. Реферат Табличные базы данных (БД): основные понятия (поле, запись, первичный ключ записи); типы данных. Системы управления базами данных и принципы работы с ними. Поиск, удаление и сортировка данных в БД