Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.19 Mб
Скачать

Ввод-вывод данных. Основные виды работ с файлами любых типов. Основные понятия. Классификация файлов

Любой файл имеет 3 характерных особенности:

  1. файл или устройство имеет имя;

  2. файл содержит компоненты (элементы, записи) одного типа;

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

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

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

В Паскале можно использовать 3 типа файлов:

текстовые (объявляются словом TEXT);

типизированные (объявляются словами FILE of);

нетипизированные (бестиповые, объявляются словом FILE).

Нетипизированные файлы отличаются тем, что для них не указывается тип компонентов файла.

Объявление файлов можно производить в разделе TYPE или VAR. Объявление текстовых файлов производится с помощью слова TEXT; тип TEXT - стандартный. Пример объявления текстовых файлов:

VAR Fl, F2 : TEXT;

где Fl, F2 - файловые переменные, имена логических файлов.

При объявлении типизированных файлов определяется тип компонентов файла. Форма объявления типизированных файлов в разделе VAR:

VAR список-имен-файлов : FILE OF тип-компонентов ;

В программе объявляется или принимается по умолчанию (INPUT и OUTPUT) имя логического файла, которое используется при обращении к процедурам и функциям работы с файлом. Для обработки данных физических файлов, рас­положенных на магнитном диске, имя логического файла должно быть связано с именем физического файла с помощью процедуры ASSIGN.

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

Стандартные аппаратные средства ПК: клавиатура, экран монитора, печа­тающее устройство (принтер), каналы ввода-вывода - определяются в Паскале специальными именами, которые называются логическими устройствами. В Паскале они рассматриваются как потенциальные источники или приемни­ки информации.

Список логических имен устройств ПК определен следующим образом:

Имена устройств

Назначение устройств

CON

Консоль: клавиатура или экран монитора

PRN

Логическое имя принтера

LPT1, LPT2, LPT3

Логические имена принтеров

AUX

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

NUL

Логическое имя "пустого" устройства

Для консоли Паскаль устанавливает различие между клавиатурой и экра­ном по направлению передачи данных: чтение (ввод) возможно только с кла­виатуры, а запись (вывод) данных - только на экран. Устройство CON можно назначить любому текстовому файлу программы. А направление передачи данных определить с помощью процедур Reset или Rewrite, подключая файл к экрану или к клавиатуре.

Для устройства NUL операторы ввода-вывода игнорируются.

Имена логических устройств PRN, LPT1 и LPT3 можно использовать только для обращения к устройствам и нельзя использовать, например, для обраще­ния к файлу на МД.

Если к ПК подключено несколько принтеров, доступ к ним осуществляется по их логическим именам LPT1, LPT2 и LPT3. Имена LPT1 и PRN - синони­мы. Поэтому назначение выводному текстовому файлу устройства LPT1 или PRN эквивалентно:

Assign ( F1, 'PRN' ) ; Assign ( F2, 'LPT1' ) ;

Стандартный библиотечный модуль PRINTER, входящий в библиотеку Turbo.TPL, объявляет имя файловой переменной LST и связывает его с логическим устройством LPT1. Это дает возможность использовать в программе файл LST для печати результатов работы программы. Например:

PROGRAM PR;

USES PRINTER;

BEGIN WRITELN ( LST, ' ПРИВЕТ! ' );

END.

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

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

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

Reset ( файловая-переменная );

Rewrite ( файловая-переменная );

Append ( файловая-переменная );

где файловая-переменная - это переменная, связанная с физическим файлом или логическим устройством с помощью Assign.

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

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

Паскаль допускает и чтение (Read) и запись (write) в ранее созданные типизированные файлы, открытые с помощью процедуры Reset. Это позво­ляет корректировать и дополнять созданные типизированные файлы.

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

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

Если текстовый файл был открыт с помощью процедур Reset, Rewrite или Append и не закрыт, то с помощью тех же процедур он может быть от­крыт повторно (он будет закрыт и вновь открыт). Но лучше закрывать файл с помощью процедуры Close. Повторное открытие с помощью Rewrite стира­ет старый файл и открывает его для создания.

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

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

С файлами любых типов можно использовать процедуры Assign, откры­тия и закрытия файлов и процедуры ввода-вывода данных. Кроме того, с файлами любых типов можно использовать следующие процедуры и функции стандартного модуля System: Eof, Erase, ReName, lOResult, ChDir (изменить каталог), MkDir (создать каталог), RmDir (переименовать каталог).

Форма обращения к функции EOF:

EOF (файловая-переменная);

Например: WHILE NOT EOF (FILE1) ...

Функция EOF возвращает значение TRUE, если указатель файла находится за последним элементом файла, и значение FALSE в противном случае. Фай­ловая переменная может относиться к файлу любого типа. Если параметр функции (и круглые скобки) опущен, то используется стандартная файловая переменная INPUT.

Форма обращения к процедуре Erase:

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

Процедура Erase стирает физический файл, связанный в этот момент с этой файловой переменной. Файл должен быть закрыт. Например, если файл F связан с помощью процедуры Assign с физическим файлом fl.rez, то после выполнения процедуры Erase (F); физический файл fl.rez будет стерт (удален).

Процедура ReName переименовывает закрытый физический файл, связан­ный в данный момент с данным логическим файлом.

Форма обращения к процедуре ReName:

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

где новое-имя-файла - выражение типа string.

Например, если файл F присоединен к физическому файлу с именем fl.rez, то после выполнения процедуры ReName (F, 'f2.rez'); физи­ческий файл fl.rez получит имя f2.rez.

Процедуры работы с файлом возвращают код ошибки, который можно по­лучить с помощью функции IOResult. Она возвращает целое значение, представляющее собой код ошибки неуспешно выполненной процедуры для работы с файлом или нуль в случае ее успешного выполнения. Использовать значение функции IOResult можно .только при отключенных средствах кон­троля успешности выполнения процедур работы с файлами со стороны систе­мы. Для отключения контроля со стороны системы используют директиву компилятора I: директива I- отключает контроль системы, а I+ - подключает его. После однократного использования функции IOResult ее значение те­ряется, т. е. использовать значение IOResult можно только один раз. Если значение IOResult надо использовать несколько раз, то его надо переслать в другую переменную типа Word или другого целого типа.

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

Например: VAR F:FILE OF CHAR;

...

ASSIGN (F,'FILE.DAT');

{$I-} { - отключение средств контроля системы }

RESET (F); { - открытие файла F }

{$I+} { - подключение средств контроля системы }

IF IORESULT <> О THEN ... {- файл не открыт, не

существует }

ELSE ... {- файл открыт, существует }

Процедуры Read и Readln

Процедуры Read и Readln обеспечивают ввод (копирование) чисел, сим­волов и строк в ОП переменных, определенных в списке данных оператора. Ввод данных можно производить из текстового файла, созданного с помощью текстового редактора, или с клавиатуры.

Форма обращения к процедуре Read:

Read (файловая-переменная, список-данных );

- для ввода данных из любого файла или логического устройства;

Read (список-данных);

- для ввода данных из стандартного файла Input;

где файловая-переменная - имя текстового файла, переменная, которая должна быть типа TEXT и связана с файлом или логическим устройст­вом с помощью Assign;

список-данных - последовательность имен переменных, разделенных запятыми: скалярных, элементов массива или элементов записи.

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

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

Процедура Readln идентична процедуре Read. За исключением того, что после считывания значения в последнюю переменную списка данных проце­дуры Readln происходит переход на следующую строку файла (экрана), т. е. оставшаяся часть строки до EOLN пропускается. Так что следующая процеду­ра Read или Readln начнет ввод данных с первого символа следующей стро­ки. Например:

Read (Fid,А,В,С); Read(С,D,Е); Readln(I,G);

Процедура Readln может быть без параметров. Например:

Readln (FID) ; - для файла FID; Readln; - для файла INPUT.

При использовании процедуры Readln (FID); производится переход в начало следующей строки файла FID, т. е. пропуск всех символов текущей строки, вплоть до EOLN. Вызов процедуры в виде 'Readln;' приводит к приостановке выполнения программы до нажатия клавиши Enter. Это можно использовать, например, для просмотра очередных значений, выведенных на экран, а после просмотра нажать Enter.

(2 атт).

Лекция №6.

Процедуры Write и Writeln

Вывод данных в текстовый файл осуществляется в основном для просмот­ра и подготовки к печати результатов работы программы. Вывод данных про­изводится с помощью процедур Write и Writeln. С их помощью можно вы­водить (копировать) числа, символы, строки и логические значения из ОП в файл или на устройство (например, на экран или принтер). Форма обращения к процедуре Write:

Write ( список-данных);

- для вывода данных в стандартный файл Output;

Write ( файловая-переменная, список-данных);

- для вывода данных в любой файл или логическое устройство,

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

список-данных - список, содержащий одно и более выражений, (в том числе констант или имен скалярных переменных, элементов массива или записи). Результатом выражений могут быть значения типа CHAR, STRING, BOOLEAN или арифметические целого или вещественного типа, и форматы для их размещения в выводном текстовом файле. Форматы в списке данных необязательны.

Форматный вывод вещественных значений в форме с плавающей точкой

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

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

Порядок числа n - это показатель степени, в которую надо возвести 10 -основание системы счисления, и для получения значения числа в форме с фиксированной точкой надо 10n умножить на мантиссу.

_ …_-X.X…XE±XX

мантисса порядок

Например:

Значение числа в форме с плавающей точкой

Соответствующая ему традиционная форма

Значение числа с фиксированной точкой

-1.2345Е+03

-1.2345 • !03

-1234.5

5.678Е-02

5.678 • Ю-2

0.05678

Лекция №7.