metod_15.03.04_atppp_oaip_ump_2016 (1016599), страница 34
Текст из файла (страница 34)
Если количество прогонов программы(например, с разными вариантами исходных данных) более одного, то целесообразноиспользовать один или ряд файлов пользователя для накопления в них результатовработы программы.Для вывода результатов на экран с помощью стандартного файла OUTPUT его ненадо связывать с физическим файлом процедурой Assign: по умолчанию в качествефизического файла будет использоваться экран.
Вызов процедуры вывода данных наэкран будет в виде:Write (список данных) ;После отладки программы можно связать файл Output:1) с принтером с помощью Assign ( Output, 'PRN');;2) с файлом на МД; например: Assign ( Output, 'F:\REZ.DAT'); .Если в качестве файла результатовнадо использовать FL - текстовый файлпользователя, то для вывода результатов на экран во время отладки ему надо назначитьв качестве физического пустой файл (' ').Например: Assign ( FL, '' ); Rewrite ( FL );Вызов процедуры вывода данных в файл будет в виде: Write ( FL, список-данных);Для того чтобы после отладки программы с помощью тех же операторов вывестиданные в текстовый файл пользователя, надо файлу FL назначить в качествефизического файла файл на МД; например:155Assign ( FL, 'LR.RES' ) ;Еще проще в качестве имени физического файла использовать строковую константу,которой присвоить пустое значение для вывода результатов на экран, имя физическогофайла для вывода результатов в текстовый файл или имя устройства для печати.Например:CONST FNAME = '';{ - для вывода результатов на экран)CONST FNAME = 'LR.RES' ;{ - для вывода в файл )CONST FNAME = 'PRN' ;{ - для вывода на печать )где FNAME - идентификатор наименования физического файла.
Впрограмме при этом можно, например, вызвать процедуры:Assign ( FL, FNAME ); Rewrite ( FL );Определение приемника результатов сводится в этом случае к изменению значениястроковой константы FNAME. Остальные операторы программы при этом остаютсябез изменения. В таком виде программа более универсальна, так как с ее помощьюпутем незначительной корректировки (одной константы) можно выводить результаты влюбой файл или на любое логическое устройство. Этот способ удобно использоватьтакже при тестировании программы, т. е. при прогоне программы с разнымивариантами исходных данных и с выводом результатов в разные текстовые файлы; приэтом в константе FNAME задается имя текстового файла результатов.Этот же прием можно использовать и при работе со стандартными файлами Input иOutput.
Например:Assign ( Input, FINAME );Reset ( Input ); Assign ( Output, FNAME );Rewrite (Output );При этом операторы ввода (Read) и вывода (Write) не будут содержать имя файловойпеременной.Для прогона программы с выводом результатов только на печать можно использовать имя файла (имя файловой переменной) LST.Использование файловой переменной LST требует применения стандартногобиблиотечного модуля Printer и имени LST в качестве файловой переменной.Стандартный библиотечный модуль PRINTER, входящий в библиотеку Turbo. TPL,объявляет имя файловой переменной LST и связывает его с логическим устройствомLPT1.
Это дает возможность использовать в программе файл LST для печатирезультатов работы программы. Например:PROGRAM PR;USES PRINTER;BEGIN WRITELN ( LST, ' ПРИВЕТ! ' ); END.Все операции по связыванию файла LST с принтером и открытие файла LSTвыполняет модуль PRINTER.Печать содержимого экрана. Например, если на экран выдается запрос пользователюв виде меню, пользователь набирает с клавиатуры ответ, который будет введен в ОПтолько после нажатия клавиши Enter.
Чтобы отпечатать с экрана запрос и ответпользователя, необходимо после набора ответа сначала отпечатать содержимое экрана(ввести команду Shift+Print Screen), и только потом нажать клавишу Enter.156Текстовые файлыОсновные понятияТекстовые файлы предназначены для хранения текстовой информации ииспользуются чаще всего как файлы с исходными данными или с результатами работыпрограммы. Текстовый файл трактуется как совокупность строк различной длины,состоящих из символов любых типов. К каждой строке возможен толькопоследовательный доступ.
В конце каждой строки текстового файла ставится признакEOLN (от англ. End Of LiNe - конец строки), а в конце всего файла - специальныйпризнак EOF (от англ. End Of File - конец файла). Признак EOLN – этопоследовательность управляющих кодов ASCII: возврата каретки #13 (CR) и переводастроки #10 (LF). Признак конца файла EOF – это код 26 ASCII (CTRL – Z).Для работы со строками текстового файла используются процедуры Read, Readln,Write и Writeln.
С помощью названных процедур можно читать из файла (вводданных) или писать в файл (вывод данных) различное количество значений разныхтипов.Первым параметром в любой из этих процедур должно быть имя файловой переменной. В этом случае осуществляется обращение к дисковому файлу или клогическому устройству, связанному с файловой переменной процедурой Assign. Еслифайловая переменная не указана, то с помощью процедур ввода происходит обращениек стандартному файлу Input, а с помощью процедур вывода - к стандартному файлуOutput.Ввод данных из текстового файлаПроцедуры Read и ReadlnПроцедуры Read и Readln обеспечивают ввод (копирование) в ОП значенийпеременных (чисел, символов и строк), определенных в списке данных оператора илииз текстового файла, созданного с помощью текстового редактора, или с клавиатуры.Логическая переменная F должна быть типа TEXT.Список ввода (данных) — последовательность имен переменных, разделенных запятыми: скалярных, элементов массива или элементов записи.Переход на следующую строку при чтении данных из файла осуществляется толькопо заполнении данной строки с помощью процедуры Readln.Процедура Readln идентична процедуре Read.
Список данных в ней не обязателен,если она содержит список данных, то переход на следующую строку осуществляетсяпосле ввода всех значений списка данных данной процедуры.После считывания значения в последнюю переменную списка данных процедурыReadln происходит переход на следующую строку файла (экрана), т. е. оставшаясячасть строки до EOLN (конца строки) пропускается. Так что следующая процедураRead или Readln начнет ввод данных с первого символа следующей строки. Например:Read (Fid, А, В, С);Read (С, D, Е);Readln (I, G);Процедура Readln может быть без параметров.
Например:Readln (FID) ; - для файла FID; Readln; - для файла INPUT.157Вызов процедуры в виде Readln приводит к приостановке выполнения программы донажатия клавиши Enter. Это можно использовать, например, для просмотраочередных значений, выведенных на экран, а после просмотра нажать Enter.Ввод символьных и строковых значенийПри вводе значения переменной типа CHAR очередной символ считывается изфайла и присваивается переменной.При вводе из файла значений переменных типа String [n] считываются очередные nсимволов и помещаются в строку символов.
количество считанных символов равно n,если не встретились символы EOLN или EOF.При использовании процедуры Read для ввода данных с клавиатуры символ илисимвольная строка, занесенные на экран, запоминаются в буфере, содержимое которогопередается программе только после нажатия клавиши Enter. Если вводимая строкабольше размерности логической переменной, то в качестве значения из буфера вводятсятолько символы, вместившиеся в область памяти, отведенной переменной приобъявлении - остальные символы теряются. Если при нажатии клавиши Enter былонабрано символов меньше, чем объявлено, то вводится столько символов, сколько ихрасположено до курсора; но если в строке последние набранные символы - пробелы, товводится значение до пробела.
Чтобы ввести и пробелы, расположенные правее последнего вводимого символа, надо после пробелов набрать еще один символ, отличныйот пробела, но на позиции n + 1. Например, с помощью следующего оператора Readlnможно ввести различные значения, примеры которых даны в таблице:VAR ST : STRING[8];... READLN ( ST ) ;Примеры набранных и введенных с клавиатуры значений строк:На экранеВведетсяПояснениеABCDEFIJKL_'ABCDEFIJ'Вместилось только 8 символовABCDE_'ABCDE'До очередного пробелаABCD DF K_'ABCD DF 'Так как после пробелов стоит Кгде _ - положение курсора перед нажатием клавиши Enter.Ввод числовых значенийПроцедура Read выполняет ввод числовых значений по следующим правилам:1) пропускаются все ведущие (предшествующие числу) пробелы, признаки табуляции и признаки конца строк (EOLN); поэтому при вводе из файла ряда числовыхзначений, расположенных в нескольких строках, процедура Readln не требуется, можноиспользовать Read; если при пропуске ведущих пробелов встретится символ EOF,переменная получит значение 0;2) выделяется значение очередного числа: от первого символа, отличного от пробела, до очередного пробела или признака EOLN или EOF;3) выделенная подстрока контролируется на правильность арифметической константы;4) полученное значение преобразуется в форму хранения числа, после чего копируется в область ОП переменной.158Если выделенное значение ошибочно (например, делается попытка ввести букву Овместо цифры 0), возникает ошибка ввода-вывода и выдается сообщение; например:106 Invalid numeric format - ошибочен числовой формат, т.
е. ошибочно числовоезначение.В этом случае надо скорректировать в файле арифметическое значение илипрограмму и только после этого повторить ввод данных.Ввод данных с клавиатурыПри вводе данных с клавиатуры с помощью операторов Read символы, по меренажатия клавиш, помещаются в специальный строковый буфер. Максимальная длинабуфера ввода при работе с клавиатурой составляет 127 символов. Буферизацияпозволяет редактирование вводимой строки до нажатия клавиши Enter. Сам символ'Enter' в буфер не помещается.
При нажатии клавиш осуществляется их отображение наэкран ПК (эхо-контроль символов). Из буфера в программу строка передается толькопосле нажатия клавиши Enter.После ввода данных с клавиатуры процедурой Read или Readln клавиша Enterустанавливает курсор в начало следующей строки; при этом предыдущие строкиперемещаются на одну строку вверх, а бывшая верхняя строка экрана становитсяневидимой (уходит с экрана).Из одной программы одновременно можно использовать несколько файловыхпеременных для ввода данных с клавиатуры, т.














