metod_15.03.04_atppp_oaip_ump_2016 (1016599), страница 33
Текст из файла (страница 33)
При выполненииэтой процедуры уничтожается старый файл с таким же именем, если он был ранеесоздан. Новый дисковый файл подготавливается к приему данных, и его переменнаяуказатель, связанная с этим файлом, устанавливается в начало файла. После открытияфайла процедурой Rewrite можно выводить данные в файл с помощью процедурыWrite.Процедура Append открывает ранее созданный текстовый файл для его дополнения новыми записями: указатель файла устанавливается в его конец, послепоследней записи файла.Процедура Close (файловая переменная); закрывает файл. Но связь файловойпеременной с именем физического файла, установленная с помощью Assign,сохраняется.
Поэтому файл можно в программе многократно открывать и закрывать помере необходимости. Процедура Close обеспечивает сохранность созданных в файлезаписей. При нормальном завершении программы действия процедуры Close151выполняются и без ее вызова, автоматически, по отношению ко всем открытымфайлам. Созданные типизированные файлы закрывать оператором Close обязательно.Повторное закрытие файлов недопустимо.Процедуры и функции для работы с файламиПроцедура Read (var F, V1, …Vn) обеспечивает ввод (копирование) чисел, символови строк из физического файла, связанного с логическим файлом F, в области ОП,соответствующие переменным Vi, определенных в списке данных оператора.Процедура игнорирует признаки EOLN, т.е.
игнорирует признаки конца строки.При вводе данных оператором Read совершаются следующие операции: выделенное очередное вводимое значение сначала передается в буфер ввода;2) затем оно преобразуется в форму переменной (определенную при объявлении),для которой оно вводится;3) после этого копируется в область ОП, зарезервированную для переменной при ееобъявлении.Последовательность данных, вводимых из файла, должна соответствоватьпоследовательности имен списка данных.При использовании в качестве логической переменной F стандартного файла словоInput можно не писать:Read (список ввода ); или Read (Input, список ввода );.Процедура Write ( var F, V1, …Vn) выводит в физический файл, связанный спеременной F, одно или несколько значений, хранящихся в ОП с адресами,соответствующими переменным Vi.
С ее помощью можно выводить (копировать) числа,символы, строки и логические значения из ОП в файл или на логическое устройство(например, на экран или принтер). Перед выводом значение преобразуется из формыего внутреннего представления (например, из числа с плавающей точкой) в форму,требуемую при выводе в соответствии с форматом вывода (например, в форму числа сфиксированной точкой), и только после этого выводится в физический файл.С файлами любых типов можно использовать процедуры Assign, открытия изакрытия файлов и процедуры ввода-вывода данных.Процедура AssignCrt (файловая переменная) ; модуля Crt связывает текстовый файлс устройством Crt (терминалом).Файловая переменная - имя переменной типа текстового файла.Установка связи логического файла с клавиатурой или с экраном зависит от того, какбудет открыт этот файл:• для ввода данных с клавиатуры - процедурой RESET или• для вывода данных на экран - процедурой REWRITE.В случае необходимости, можно один и тот же файл открывать то для ввода, то длявывода данных.
Пример программы, в которой 3 текстовых файла могут работать склавиатурой или с экраном для ввода или для вывода данных.Переключение текстовых файлов программы на работу с экраном или клавиатурой.Uses Crt;VAR Fl, F2, F3 : TEXT;А, В, С : BYTE;BEGINAssign ( Fl , ' '); Assign ( F2, ‘CON1’ ); AssignCrt ( F3 );152Rewrite (Fl); Rewrite (F2); Rewrite (F3);{ открыть для вывода на экран }Write ( Fl,A ); Write ( F2, В ); Write( F3, С );Close ( Fl ); Close ( F2 ); Close ( F3 );{ - закрыть файлы }Reset ( Fl ) ; Reset ( F2 ); Reset ( F3 ); { - открыть для ввода данных}Read ( Fl, A ); Read ( F2, В ); Read ( F3,С );{с клавиатуры }Close ( Fl ); Close ( F2 ); Close ( Fl );{ - закрыть файлы }END.Кроме того, с файлами любых типов можно использовать следующие процедуры ифункции стандартного модуля System: Eof (конец), Erase (стереть), ReName(переименовать), IOResult (ошибка результата), ChDir (изменить каталог), MkDir(создать каталог), RmDir (переименовать каталог).Форма обращения к функции EOF: EOF (файловая переменная);Например: WHILE NOT EOF (FILE1) .
. .Функция EOF возвращает значение TRUE, если указатель файла находится запоследним элементом файла, и значение FALSE в противном случае. Файловаяпеременная может относиться к файлу любого типа. Если параметр функции (икруглые скобки) опущен, то используется стандартная файловая переменная INPUT.Форма обращения к процедуре Erase (файловая переменная);:Процедура Erase стирает физический файл, связанный в этот момент с этойфайловой переменной.
Файл должен быть закрыт. Например, если файл F связан спомощью процедуры Assign с физическим файлом fl.rez, то после выполненияпроцедуры Erase (F) ; физический файл fl.rez будет стерт (удален).Процедура ReName переименовывает закрытый физический файл, связанный вданный момент с данным логическим файлом.Форма обращения к процедуре: ReName (файловая переменная, новое имя файла );где новое имя файла - выражение типа string.Например, если файл F присоединен к физическому файлу с именем fl.rez, то послевыполнения процедуры ReName (F, 'f2.rez'); физический файл fl.rez получит имя f2.rez.Выполнение операций ввода-вывода сопровождается автоматическим контролем состороны компилятора.
Существует возможность отключения контроля директивой I(обратное включение осуществляется директивой I+). В этом случае для контроляправильности выполнения процедур ввода-вывода можно использовать значениефункции IOResult.Функция IOResult: Integer ; - возвращает целое значение, представляющее собой кодошибки неуспешно выполненной процедуры для работы с файлом или нуль в случае ееуспешного выполнения.После выполнения процедуры работы с файлом значение функции IOResult можнопроанализировать и по результатам анализа определить дальнейшие программныедействия. Например:VAR F : FILE OF CHAR;ASSIGN ( F, 'FILE.DAT' );{$!-}{ - отключение средств контроля системы }RESET (F);{ - открытие файла F }{$!+}{ - подключение средств контроля системы }153IF IORESULT <> О THEN ...
{ - файл не открыт, не существует } ELSE ... { - файлоткрыт, существует }Массивы файловФайловая переменная может быть элементом массива или записи. В этом случае длятекстовых и типизированных файлов становится возможным создать индекснуюорганизацию файлов (массив файлов). Целесообразно применять массивы файлов длярешения задач, требующих одновременной работы с несколькими файлами.Пример объявления массива файлов:CONST KF = 10 ;{ - количество файлов в массиве }TYPE FL = FILE OF REAL;{ - тип компонент файла }VAR MFL : ARRAY [1..KF] OF FL ; { - массив файлов типа 'FL' }Массивы файлов можно использовать для ускорения поиска данных в большихфайлах.
Например, в типизированных файлах телефонного справочника, кадровыхсведений. Для этого все данные надо упорядочить по определенному признаку и почастям разместить их в файлах - элементах массива файлов. Например, каждый файл измассива файлов может содержать сведения об абонентах одной АТС(автоматизированной телефонной станции). При этом номер элемента в массиве файловдолжен быть функцией от номера АТС; например, он может быть равен трем первымцифрам семизначного номера телефона.Пример программы с использованием массива файлов для телефонного справочника.Номера файлов всех АТС в массиве файлов F пронумерованы начиная с номера 100: от100 до 100 + COLATS.
Имена физических файлов можно формировать из номера АТС,т. е. из первых трех цифр номера телефона. В примере имена физических файловизменяются от 100.DAT до 100+COLATS.DAT. Поиск сведений об абоненте с заданнымномером телефона производится только в файле с номером АТС, заданным в требуемомномере телефона. Для этого надо открыть для поиска только один файл этой АТС.В программе используется STR - встроенная процедура, которая формирует строкуIMF из I - целого значения, номера АТС.Использование массива файлов.CONST COLATS =10;{ - количество АТС }ТУРЕ STRUC = RECORD{ - тип записей файла }NOM : INTEGER;{ - номер телефона }FIO : STRING [20]{ - Ф.И.О.
абонента }END;FL = FILE OF STRUC;{ - тип файла }VAR ST : STRUC;F : ARRAY [100 .. COLATS + 100 ] OF FL ; { - массив файлов }IMF : STRING[3];{ - имя, номер файла }…………………………………………..FOR I := 100 TO COLATS + 100 DOBEGINSTR (I, IMF); ASSIGN (F[I], IMF + '.DAT'); { - связь файлов }154REWRITE ( F[I]);{ открытие I-файла }. . . { Запись в I - файл: }WRITE (F[I], ST );... CLOSE (F[I]);RESET (F[I]>; . . .
READ (F[I], ST); { - чтение из 1-файла }CLOSE (F[IJ); . . .Способы печати результатов работыРезультаты работы программы могут быть выведены на печать или в файлы,текстовые или типизированные. Как правило, результаты, которые должны бытьраспечатаны, формируются в виде текстовых файлов, а для длительного хранения ипоследующего использования - в виде типизированных файлов.Рассмотрим некоторые способы организации просмотра и печати результатов выполнения программы:1) вывод результатов на экран, а после отладки программы вывод результатов изпрограммы на печать во время выполнения программы (средствами Паскаля);2) вывод результатов на экран, после отладки вывод результатов в текстовый файл,а из файла - на печать средствами DOS;3) вывод результатов только в текстовый файл, а после отладки и анализа полученных результатов печать из файла средствами DOS;4) вывод данных на экран: формирование экрана с результатами в том виде (меню,ответ пользователя), в котором они должны быть на печати; останов программы втребуемой точке, печать содержимого экрана (командой Shift+Print Screen) ипродолжение выполнения программы.Для вывода данных на экран можно использовать файлы OUTPUT или файлпользователя, который связан с экраном.














