К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 19
Текст из файла (страница 19)
Если параметр У относится к типу Кеа1, то Кеаб(Г, Ч) воспринимает последовательность символов, образующую число со знаком и, возможно, с начальными пробелами. Обозначенное такой последовательностью вещественное значение затем присваивается Ъ". В процессе просмотра файла Г (пропуская пробелы) при чтении числа Кеаб 'может пропускать и маркеры концов строк.
Файл Г остается после этого в положении, указывающем на отличный от цифры символ, следующий за последней цифрой, входящей в состав числа. Для правильного чтения последовательных чисел разделяйте их пробеламн или располагайте в отдельных строчках. Кеаб воспринимает самую длинную последовательность цифр, и если два числа не отделить друг от друга, то Кеаб не сможет разделить их (и человек не сможет!). Примеры. Считывание и обработка последовательности чисел, за последним из которых идет символ кзвездочка». Считается, что à — текстовый файл, а Х и СЬ вЂ” переменные, относящиеся соответственно к типу !п(еКег (или Кеа)) и СЬаг. аеэеВ(г); гереаь кеад(Е Х,Сй); Р(Х) нпй(1 СЬ= " ' Одна из наиболее часто встречающихся ситуаций заключается в том, что мы не знаем, сколько чисел нужно прочитать, а специального символа, маркируюШего конец последовательности, нет.
Ниже приводятся две подходящие для этого случая схемы. В них используется процедура ВЫрВ!ап(гз: ! !44 Рукоеодотео для пользователе ргоседоге ВХ(рВ1апКз(наг Г: Техо); наг Оапе: Воо1еап; Ьех(п Оопе:= Га1зе; гереаС 11 ео((Е) Сйеп Оопе:= Тгое е1зе 11 ЕТ = ' ' СЬеп Вео(Г) е1зе попе := Тгие ипС(1 Оопе епд В первой схеме числа обрабатываются поодиночке: КезеС(Е); нЬ11е поС ео((Г) до Ьее)п Веад(Г,Х); ЗМ1рВ1апаз(Г); Р(Х); епд Во второй схеме обрабатывается по и чисел: Яезез(Г); , иЬ11е поС ео1(Е) до Ьех(п Кепд(Г,Х1,...,Хп); ВХ)рВ1апзз(Г) Р(Х1,...,Хп); епд (1(ля правильной работы этой схемы необходимо, чтобы количество чисел было кратным и.) 12.3. ПРОЦЕДУРЪ| ТУЦ)ТЕ и ТУК1ТЕЕН Процедура %г((е для текстовых файлов уже была определена в равд. 9.2.
В отличие от обычных процедур она воспринимает разное число параметров, и, кроме того, эти параметры могут относиться к типам, совместимым с типами 1п1епег, Кеа!, Воо!еап, нли строковым типам. Процедура ТЧТ1(е добавляет к текстовым'файлам строки символов (состоящие из одного или более символов). Пусть Р1, Р2, ..., Рп — параметры, вид которых определен синтаксической диаграм- И. Текстовые файлы.
Ввод и вывод !4Б мой на рис. 12.1, а à — текстовый файл. Если Г не определено, или , этот файл не находится в режиме формирования, или же ео((Г) дает значение, не равное 1гне, то обращение Ъгг!(е(Г, Р)— ошибка. 1. Ъгг)(е(Р1, ..., Рп) эквивалентно: Ъгг)(е(Оп1рп1, Р1, ..., Рп) 2. Ъгг!1е(Г, Р1, ..., Рп) эквивалентно: Ьеи!и Иг!1е(Г, Р1); ...; Ъ'г!1е(Г, Рп) епб 3.
Ъгг!1е!п(Р1, ..., Рп) эквивалентно: Ътг((е!п (Он(рп1, Р1, „Рп) 4. Ъгг((е!п(Г, Р1, ..., Рп) эквивалентно: Ьеи)п Ъгг!1е(Г, Р1); ...; Ъг)(е(Г, Рп); Ъгг)(е(п(Г) епс) Причем Ъгг!(е! п сначала записывает Р1, ..., Рп, а затем заканчивает текущую строчку текстового файла Г. Р и с. !2.!. Синтаксическая диаграмма для Списка параметров вывода 5. Каждый из параметров Р! должен выглядеть так: е е: ти е: иг:1 где е, ие и 1 — выражения, причем е — это то значение, которое нужно записать (его тип —. СЬаг, !п1еиег, Воо!еап, тсеа!или любая Иб Рукоеодятоо для пользователя строчка), ю называется минимальным размером поля и включается в обращение по желанию. Оно должно быть положительным целым значением; указывает число записываемых символов.
Как правило, е записывается с помощью ч' символов (перед ним, если надо, ставятся пробелы). Если размер поля не указан, то ему, в соответствии с типом е, приписывается некоторое значение. Выражение 1 называется размером дробной части и используется по желанию в том случае, если е типа Кеа!. Это должно быть положи-тельное целое выражение. 6. Если е типа Спаг, то подразумеваемое значение ч — 1.
Поэтому Ъ'г1(е(Г, С) эквивалентно П:= С; Рп1(Г). 7. Если е типа 1п1едег, то подразумеваемое значение ч определяется при реализации. Если даже значение чт мало и его не хватает для равмещения целого, тем не менее все представление целого будет записано (включая, если необходимо, и « —.»). 8. Если е относится к строковому типу, то подразумеваемое значение чь равно длине строки. Если же ч меньше размера строки, то будет записано ровно зд символов из строки е. 9.
Если тип е — Воо!еап, то подразумеваемое значение ъ определяется кри реализации. В зависимости от значения е по правилам п. 8 будет записана одна из строк: '1гпе' или '1а(зе'. Будут ли при этом для представления данных строк использованы прописные либо строчные буквы (или даже их комбинации) — определяется при реализации. 1О.
Если тип е — Кеа1, то подразумеваемое значение 1ч определяется при реализации. Если тч меньше числа символов, требующихся для записи вещественного числа, то выделяется столько места, сколько нужно (выделяется даже пространство для символа « — », если е — отрицательное). Если задано 1 (размер дробной части), то значение е записывается в форме с фиксированной запятой.
Если же 1 не указано, то число записывается в десятичном виде с плавающей запятой и порядком. В общем виде запись с фиксированной запятой представляет собой такую последовательность символов: возможный знак минус (еслн число отрицательное), последовательность цифр, представляющая целую часть, точка (десятичная запятая) н последовательность, представляющая собой дробную часть.
Размер дробной части определяется 1. Запись с плавающей запятой в общем виде выглядит так: пробел или знак минус, одна цифра, точка (десятичная запятая), последовательность цифр, буква е (или Е), знак плюс или минус и последовательность цифр, представляющая порядок, размер которой определяется прн реализации..Длина первой последователь- !2 Текстовые файлвк Ввод и вывод )47 ности цифр (предшествующей букве е) варьируется в зависимости от знанения чс. На рис. !2.2 приводятся примеры вывода каждого нз типов.
Сваг: Иг!(е('3':и) Иг!ее(-1984:и) 1поеВег и Нг нее (1984: и) — 1984 -1984 с 1.з 3 2 1 †19 †19 ||В ~ ест!и85 Иг!Ее('пе11о':и) 'пе1 йе11о 1 1! Иг!Се(!а!ее:и) Иг!Ее(етое:и) Воо1еап и Его егое Е а 1 ! а 1 з е 1984 1984 1984 746 Рриоеодетео для оольаоеателя Иггве(-123.789:и:() Иг!ве(123.789:и:!) -121.3 1 2 3 . 1 8.9 — 129.1213 12328 123.139 23.1399 123.8 121.8 123. 8 21.9 129.8 — »3.8 Иггее(-987.6:и) Иг)се(987.6:и) в и — В.
ВЕ 9 -1.1 Вг — 9.88Е+02 9.9Е 92 9.9Е 32 9.88Е+02 — 9.876Е+02 1.8 ПЕ 32 10 Р ив. !ЕА2. Примеры форматного вывода !2.4. ПРОНЕ)(УРА РАбЕ Лля удобства работы с текстовыми файлами в Паскале существует предописанная процедура Раде. Обращение к ней приводит к тому, что при последующей выдаче (при печати Г или выводе на дисплей), текст, записанный после обращения, появится на новой «странице». Лействие Раде(Г) на файл Г определяется при реализации. Чаще всего при обращении Раде(Г) в файл записывается некоторый управляющий символ (например, в множестве символов АЬС11 это П вЂ” Готт Геег)), который и приводит к желаемому эффекту. Замечание. Если перед обращением к Раде(Г) не было выполнено %г((е!и, то в качестве своей первой работы Раде(Г) и выполняет такое неявное обращение. Файл Г должен быть определен и находиться в режиме формирования, если это не так, то обращение Раде(Г) — ошибка.
Что происходит с файлом при чтении, если к нему применялись обращения Раде(Г) — зависит от реализации. Кеа! и Л 1 1 3 1 4 5 1 6 1 7 1 9.8760Е+02 — 9.8760Е«02 ОПИСАНИЕ ЯЗЫКА !. ВВЕДЕНИЕ Создание языка Паскаль преследовало две основные цели. Во-первых, хотелось построить язык, пригодный для обучения программированию как некоторой систематической дисциплине, основанной на нескольких фундаментальных понятиях, причем эти понятия должны были найти естественное и ясное отражение в языке.
Во-вторых, хотелось реализовать этот язык на современных машинах надежным и эффективным способом. Желание обратиться при обучении программированию к новому языку объясняется нашей неудовлетворенностью большинством используемых сейчас языков. Особенности и конструкции этих языков часто невозможно логически н убедительно объяснить; как правило, они при систематическом подходе вызывают нарекания. Кроме того, мы убеждены, что язык, на котором студент учится выражать свои мысли, оказывает глубокое влияние на его изобретательность н способ мышления, поэтому царяший в существующих языках беспорядок непосредственно сказывается на стиле программирования студентов.
Конечно, вводить еще один язык программирования следует весьма осмотрительно, и, кроме того, обучение программированию на языке, не распространенном широко и не всем доступном, вызывает возражения, обусловленные до некоторой степени сиюминутнымн коммерческими соображениями. Однако, если выбирать язык для обучения, исходя только из его распространенности и доступности,мы обречем себя на застой, поскольку язык, которому мы все больше будем обучать, станет из-за этого еше более распространенным. Такие соображения показались нам вполне заслуживающими того, чтобы попытаться разорвать этот порочный круг.