Типы файлов, создание файлов в среде Турбо-Паскаль 7

Автор работы: Пользователь скрыл имя, 15 Августа 2013 в 00:51, курсовая работа

Краткое описание

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

Содержание

Введение………………………………………..……………………………. 2
Описание файлового типа………………………………………..………… 3
Физический и логический файлы……………………………………..…….4
Классификация файлов в Турбо Паскале…………………………………...4
Доступ к файлам………………………………………………………….…. 5
Инициация файла……………………………………………………….……6
Процедуры и функции для работы с файлами………………………..……7
Текстовые файлы……………………………………………………………13
Использование буфера ввода-вывода………………………………….…. 16
Типизированные файлы ………………………………………………..…..17
Нетипизированные файлы…………………………………………...……..19
Литература…………………………………………………………… …….21

Вложенные файлы: 1 файл

Контрольная работа по информатике. Файлы.doc

— 154.00 Кб (Скачать файл)

 Специально введенная  процедура Flush(var F: text) дает возможность связать запись с помощью процедур Write и Writeln непосредственно с физической записью на диск. Вызов процедуры гарантирует, что все символы, переданные для записи, действительно в это же время будут записаны во внешний файл. Использовать процедуру можно для текстовых файлов, открытых только для записи процедурами Rewrite и Append. В прикладных программах процедуру используют редко, как правило, в тех случаях, когда необходимо подтверждение о физической записи во внешний файл.

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

Процедура SetTextBuf(var F : text; var Buf[; size : word]); дает возможность назначить свой буфер ввода-вывода Buf необходимого объема Size (в байтах) текстовому  F. Параметр Size при вызове может быть опущен. В этом случае размер буфера соответствует размеру в байтах  переменной Buf, т.е. значению функции SizeOf(Buf). Назначение SetTextBuf файловой переменной F распространяется до следующего использования переменной новым внешним файлом.

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

 

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

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

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

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

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

 Формат обращения:

READ (<ф.п.>,<сп. ввода>)

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

Файловая переменная <ф.п.> должна быть объявлена предложением FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода - вывода.

Процедура WRITE. Используется для записи данных в типизированный файл. Формат обращения:

WRITE (<ф.п.>,<сп. вывода>)

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

Процедура SEEK. Смещает указатель файла к требуемому компоненту.

Формат обращения:

SEEK (<ф.п.>,<N компонента>)

Здесь <N компонента> — выражение типа LONGINT, указывающее номер компонента файла.

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

Неверное позиционирование на компоненту, как правило, не приводит к каким – либо видимым ошибкам  ввода – вывода, на которые всегда можно отреагировать. Исключение составляют ситуации когда нет доступа к файлу, файл не открыт или назначено позиционирование на несуществующую компоненту. Такие ситуации обрабатываются с помощью функции IORESULT.

Функция FILESIZE. Возвращает значение типа LONGINT, которое содержит количество компонентов файла, формат обращения:

       FILESIZE (<ф.п.>)

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

SEEK (<ф.п.>, FileSize(<ф.п.>));

Функция FILEPOS. Возвращает значение типа LONGINT, содержащий порядковый номер компонента файла, который будет обрабатывать следующей операцией ввода—вывода. Формат обращения:

FILEPOS (<ф.п.>)

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

Процедура  TRUNCATE(ф.п.). Уничтожает все компоненты файла, начиная с места текущего положения файлового указателя.

Для того чтобы, очередной  компонент мог быть записан в  конец типизированного файла, необходимо перевести текущую файловую позицию  в конец файла. Когда создается  новый файл, это происходит автоматически после формирования каждой очередной записи. Если файл уже создан и файловая позиция, установленная по Seek, находится где-нибудь в начале файла (FilePos(F) < FileSize(F)), то в конец файла ее позволяет перевести вызов Seek (F, FileSize (F) ) ;

В каждом файле число  логических и физических записей  совпадает, а при позиционировании номер физической записи на единицу меньше номера логической  записи, так как нумерация физических записей начинается с 1.

Типизированные файлы  – это  файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных. Стандартное задание в программе такой файловой переменной осуществляется следующим образом:

type

Filerec = record

………………..

  end;

var

f : file of Filerec;

Нетипизированные файлы

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

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

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

При инициации нетипизированного  файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах. Например, так:

var

   f: file;

begin

……………………………….

        assign(f,’ myfile.dat’);

    reset(f,512);

………………………………

     end.

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

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

Длина записи  нетипизированного  файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.

Турбо Паскаль не накладывает  каких-либо ограничений на длину  записи нетипизированного файла, за исключением требования положительности и ограничения максимальной длины 65535 байтами (емкость целого типа WORD). Однако для обеспечения максимальной скорости обмена данными следует задавать длину, которая была бы кратна длине физического сектора дискового носителя информации (512 байт). Более того, фактически пространство на диске выделяется любому файлу порциями — кластерами, которые в зависимости от типа диска могут занимать 2 и более смежных секторов. Как правило, кластер может быть прочитан или записан за один оборот диска, поэтому наивысшую скорость обмена данными можно получить, если указать длину записи, равную длине кластера.

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

BLOCKREAD (<ф.п.>, <буф>, D <[, <NN>]  )

BLOCKWRITE (<ф.п.>, <буф>, D <[, <NN>] )

Здесь <буф> — буфер: имя переменной, которая будет участвовать в обмене данными с дисками;

<D> — количество записей, которые должны быть прочитаны или записаны за одно обращение к диску;

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

За одно обращение  к процедурам может быть передано до N*RECS байт, где RECS — длина записи нетипизированного файла, N – количество записей. Суммарный объем разового обмена не должен превышать 64 килобайт. Передача идет, начиная с первого байта переменной <буф>. Программист должен позаботиться о том, чтобы длина внутреннего представления переменной <буф> была достаточной для размещения всех N*RECS байт при чтении информации с диска. Если при чтении указана переменная <буф> недостаточной длины или если в процессе записи на диск не окажется нужного свободного пространства, возникнет ошибка ввода - вывода, которую можно заблокировать, указав необязательный параметр <NN> (переменная типа WORD).

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

 

 

 

 

Литература

 

1. Фаронов В.В. Турбо  Паскаль 7.0. Начальный курс. Учебное  пособие. – М.:”Нолидж”, 1997. – 616 с.,ил.

2. Попов В.Б. Turbo Pascal для школьников. Версия 7.0: Учеб. Пособие. – М.: Финансы и статистика, 1996. – 464 с., ил.

3. Марченко А.И., Марченко  Л.А. Программирование в среде Turbo Pascal 7.0. – М.: Бином Универсал, К.: ЮНИОР, 1997. – 496 с., ил.


Информация о работе Типы файлов, создание файлов в среде Турбо-Паскаль 7