Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экз по паскалю.doc
Скачиваний:
14
Добавлен:
06.09.2019
Размер:
334.85 Кб
Скачать

46. Файлы

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

Файловые типы языка Паскаль бывают стандартные и определяемые программистом. Стандартными являются текстовый файл (text) и бестиповой файл(file). Они описываются в программе, например, так:

var ft : text;

fb : file;

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

var fc : file of <тип_компонент>

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

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

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

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

'primer.pas' - имя файла в текущем каталоге

'd:\pascal\input.txt' - полное имя файла

'CON' 'NUL' 'COM1' 'PRN' - имена устройств

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

объявить файловую переменную;

связать ее с физическим файлом;

открыть файл для чтения и/или записи;

выполнить операции ввода-вывода;

закрыть файл.

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

Подпрограммы для работы со всеми типами файлов

Процедуры

assign(var f; filename : string)

Связывает логический файл f с физическим файлом, имя которого задано в строке filename.

close(var f)

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

erase(var f)

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

rename(var f; newname : string)

Переименовывает физический файл на диске, связанный с логическим файлом f.

reset(var f)

Открывает логический файл f для последующего чтения данных, то есть открывает входной файл.

rewrite(var f)

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

Функции

eof(var f) : boolean

Возвращает значение true, если при чтении достигнут конец файла.

IOresult : integer

Возвращает целое число, соответствующее коду последней ошибки ввода-вывода. При нормальном завершении операции функция вернет значение 0. Функция IOresult работает только с ключом компиляции {$I-}.

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

Текстовый файл представляет собой последовательность строк символов переменной длины. Каждая строка заканчивается символами перевода строки и возврата каретки (их коды - 13 и 10). Эти символы вставляются в физический файл при нажатии клавиши Enter. При чтении файла эти символы воспринимаются как разделитель.

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

append(var f)

Для чтения из файла применяются процедуры:

read(f, список)

readln(f, [список])

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

45. Текстовый файл можно рассматривать как последовательность символов, разбитую на строки длиной от 0 до 256 символов. Для описания используется стандартный тип Text:

var

F: text; {F - файловая переменная}

Каждая строка завершается маркером конца строки. На практике такой маркер представляет собой последовательность из двух символов: перевод строки chr(13) и возврат каретки chr(10). Эти два символа задают стандартные действия по управлению текстовыми файлами. Открываемые по умолчанию стандартные файлы Input и Output в модуле System имеют тип Text. У текстовых файлов есть своя специфика. Специальные расширения стандартных процедур чтения (Read) и записи (Write) разрешают работать со значениями несимвольного типа. Другими словами, последовательность символов автоматически преобразуется к значению того типа переменной, которая используется в файловых операциях.

Вызов Read(F, Ww), где Ww – переменная типа word, осуществляет чтение из файла F последовательности цифр, которая затем интерпретируется в число, значение которого и будет присвоено переменной Ww. В случае если вместо последовательности цифр идет любая другая последовательность символов, использование такого оператора приводит к ошибке выполнения программы. Открытие текстового файла можно произвести двумя стандартными способами:

 

- поставить в соответствие файловой переменной имя файла (процедура Assign), открыть новый текстовый файл (процедура Rewrite);

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

Текстовый файл в силу своей специфики во время работы допускает только один вид операции: чтение или запись. В связи с этим для работы с текстовыми файлами используется еще одна процедура открытия файла:

Append(vaг F : text);

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

Для обработки текстовых файлов используются процедуры Read и Write, обеспечивающие соответственно чтение и запись одной строки и более в текстовый файл. Использование специальных разделителей строк позволило ввести в состав языковых средств еще две процедуры: Readln, выполняющую те же действия, что и Read, и дополнительно – чтение до маркера конца строки и переход к новой строке; Writeln, обеспечивающую запись всех величин с обязательной установкой маркера конца строки в файл.

Процедура Read обеспечивает ввод данных общим потоком из одной строки, a Readln приводит к обязательному переходу к следующей строке текстового файла, т. е. ввод данных осуществляется из различных строк. Все вышесказанное в равной мере относится к операциям записи с помощью процедур Write и Writeln.

При организации операций ввода-вывода используются специальные языковые средства в виде функций Eoln, Eof, SeekEoln, SeekEof.

Функция Eoln(var F: text) возвращает булевское значение True, если текущая файловая позиция находится на маркере конца строки или вызов Eof(F) вернул значение True. Во всех остальных случаях значение функции будет False.

Функция Eof(var F: text) возвращает булевское значение True, если указатель конца файла находится сразу за последним компонентом, и False – в противном случае.

Функция SeekEoln(var F: text) возвращает булевское значение True при достижении маркера конца строки, причем указатель файла пропускает все пробелы и знаки табуляции, предшествующие маркеру. В противном случае функция возвращает значение False.

Функция SeekEof(var F: text) возвращает значение True, если указатель файла находится на маркере конца файла. Эта функция также пропускает все пробелы и знаки табуляции, предшествующие маркеру, и выполняет автоматический пропуск маркера конца строки. Характерным примером использования этих функций может служить чтение числовых величин из текстового файла, когда необходимо пропустить обработку разделяющих эти числа пробелов или знаков табуляции.

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

Например: Программа - исходная, откомпилированная, и т.д.  Данные – исходные, промежуточные, результирующие, рисунок, текст, график,  аудио- видео  и т.д. ).

Характеристики файлов

 

Файл имеет имя.

Размер.

Файл имеет атрибуты.

Дату и время создания.

Файлы бывают различных типов.

Имена файлов

 

    Существуют следующие  имена файлов:

Файловые переменные - это имена, которые используются программой на Паскале.

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

Имена логических устройств -  представляющие имена стандартных (аппаратных) логических устройств.

 

Имена файловых переменных. Определяются по правилам Паскаля.

Имена логических устройств. Существуют следующие имена логических устройств:

CON – консоль (клавиатура/дисплей); LPT1, LPT2, LPT3  - принтеры (параллельные порты); PRN – синоним LPT1; COM1 и COM2 – коммуникационные,  последовательные порты; AUX синоним COM1; NUL - фиктивное устройство. Связывает файл с фиктивным устройством. При попытке ввода сразу сообщает о конце файла, а при выводе не выполняет никаких действий (оно м..б. использовано при отладке программы);

     CLOCK$ - системные часы.

      Имена дисковых файлов. Имя содержит от 1 до 8 разрешенных символов, т.е. букв, цифр и специальных символов:_  -  $  #  &  @ !  %  ’ ^  ( )  {  } . Имя начинается с любого символа. За именем может следовать расширение,  которое   содержит  от 1 до 3 символов,  и отделяется от имени точкой. Расширение, как правило, характеризует разновидность файла. В табл.1 приведены примеры расширений некоторых файлов.