Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Замечание. В таблице w - задает ширину поля, m - задает количество ведущих нулей, d - задает количество цифр в дробной части и e - задает значение показателя степени.



Правила применения числовых дескрипторов ( Rules for Numeric Edit Descriptors )

При вводе:

· поля из пробелов интерпретируются как нуль, а в других случаях интерпретация пробела зависит от дескрипторов BN и BZ. Знак + не обязателен.

· с дескрипторами F, E, G и D число цифр дробной части числа определяется явным заданием десятичной точки в поле числа, а при ее отсутствии ‑ параметр d.

· с дескрипторами I, Z, F, E, G, D и L поле вводимого данного может заканчиваться запятой, которая завершает поле. Тогда поле следующего данного начинается сразу после запятой. Нельзя использовать запятые вместе с дескрипторами явного позиционирования (T, TL, TR и nX), поскольку последние изменяют положение символов в записи.

При выводе:

· данные выравниваются по правой границе поля и при необходимости добавляются ведущими пробелами.

· если представление числа (или представление показателя степени) превышает отведенные w позиций, все поле заполняется звездочками.

· если дробная часть вещественного числа занимает больше d позиций, число округляется до d знаков после точки.

 

Для представления комплексных чисел нужны два дескриптора F, E, G или D (необязательно оба одинаковых). Первый ‑ для вещественной и второй ‑ для мнимой частей числа.

 

3.7.3. Преобразование целых данных ( Integer Editing )

 

Iw[.m]

где

· w - отводимое количество позиций под число;

· m - задает вывод перед числом m-n ведущих нулей (m> 0, m< w, n - число значащих цифр в числе).

 

При вводе:

· любое вводимое по дескриптору I значение должно удовлетворять форме целого числа со знаком (знак числа и последовательность цифр и пробелов без десятичной точки и показателя степени), иначе происходит ошибка выполнения программы.

При выводе:

· элемент списка ВВ должен иметь целый тип, иначе происходит ошибка выполнения программы;

· выводимое число выравнивается по правой границе поля и занимает w позиций: 1 позиция ‑ под знак числа (обязательно для ‘–’ и не обязательно для ‘+’), а остальные ‑ под значение (w позиций в случае положительных и w-1 позиций в случае отрицательных чисел).

 

Пример

 

INTEGER k1, k2

 

READ(*, *) k1, k2

WRITE(*, ’(1x, i5, i7.5)’) k1, k2

 

ввод данных:

123 -123

вывод данных (знак подчеркивания означает пробел)

__123_-00123

 

3.7.4. Преобразование шестнадцатеричных данных ( Hexadecimal Editing )

Z[w]

 

Дескриптор Z позволяет проводить преобразование между внешними данными, представленными в шестнадцатеричном представлении ( цифры от 0 до 9 и буквы от A до F), и их внутренним машинном представлении. Каждый байт внутренних данных соответствует двум шестнадцатеричным цифрам. Например, ASCII символ m выводится как шестнадцатеричные символы 6D. Аналогично, значение типа INTEGER*4 выводится как восемь шестнадцатеричных цифр.

Параметр ширины поля ввода или вывода w определяет количество шестнадцатеричных цифр. Если он не указан, тогда отводится поле 2*n, где n ‑ длина в байтах элемента списка ввода-вывода.

При выводе, символьные данные записываются в том же порядке, в каком они располагаются в памяти. Числовые данные выводятся в порядке убывания значимости, например INTEGER*2 значение 10 выводится как 000A.

В Табл. 3.B приведены правила обработки шестнадцатеричных значений при вводе-выводе. Значение n является длиной в байтах элемента списка ввода-вывода:

Табл. 3.B

Правила преобразования шестнадцатеричных данных

Операция Правило
Вывод Если w > 2*n, то 2*n шестнадцатеричных символов выравниваются по правой границе и дополняются слева нулями до ширины. Если w < = 2*n, то выводится w правых шестнадцатеричных символов.
Ввод Если w > = 2*n, то вводится 2*n шестнадцатеричных символов. Если w < 2*n, то вводится первых w шестнадцатеричных символов. Считанное значение дополняется слева нулями до длины 2*n.

 

Пробелы во вводном поле считаются нулями.

Редактирование шестнадцатеричных и десятичных значений имеет два заметных отличия:

если выводится больше шестнадцатеричных символов, чем длина поля w, поле не заполняется звездочками, а выводится w правых символов;

шестнадцатеричные данные не являются знаковыми, поэтому, например, введенное значение FFFF интерпретируется как 65, 535, а не 1.

 

Примеры

 

CHARACTER*2 a

INTEGER*2 num

 

a = 'YZ'

num = 4096

 

WRITE(*, '(1X, Z, 1X, Z2, 1X, Z6)') a, a, a

WRITE(*, '(1X, Z, 1X, Z2, 1X, Z6)') num, num, num

 

Выводимые значения:

 

595A 5A 00595A

1000 00 001000

 

Если вводится значение 595A (шестнадцатеричное представление 'YZ') и элемент списка ввода-вывода имеет тип CHARACTER*2, тогда для разных форматов ввода имеем:

 

Дескриптор Введенное значение
Z YZ
Z2 0Y
Z6 YZ

 

3.7.5. Преобразование вещественных данных с фиксированной точкой ( Real Editing without Exponents )

Fw.d

где

· w - отводимое количество позиций под число;

· d - задает количество цифр в дробной части числа.

 

При вводе:

· вводимое число может быть или целым или вещественным, а его значение не должно выходить за диапазон возможных значений соответствующей переменной;

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

При выводе:

· элемент списка ВВ выводимый по дескриптору F должен быть REAL*4 или REAL*8 типа, иначе происходит ошибка выполнения программы;

· выводимое число выравнивается по правой границе поля и занимает w позиций:

¨ 1 позиция ‑ под знак числа (обязательно для ‘–’ и не обязательно для ‘+’);

¨ одна позиция ‑ под десятичную точку;

¨ d позиций под дробную часть

¨ остальные под целую часть числа (w-d-1 позиций в случае положительных и w-d-2 позиций в случае отрицательных чисел). Если целая часть числа занимает меньше места, чем ей отведено, она добавляется ведущими пробелами.

 

Дескриптор масштабирования kP работает следующим образом:

· при вводе по дескриптору kPFw.d введенное число после ввода умножается на 10-k;

· при выводе по дескриптору kPFw.d выводимое число перед выводом умножается на 10k;

Пример

 

REAL*4 g, h, e, r, k, i, n

DATA g /12345.678/, h /12345678./,

* e /-4.56E+1/, r/-365./

 

WRITE(*, 100) g, h, e, r

WRITE(*, 200) g, h, e, r

100 FORMAT(1X, F8.2)

200 FORMAT(1X, 4F10.1)

 

вывод данных (знак подчеркивания означает пробел):

 

12345.68

********

__-45.60

_-365.00

___12345.712345680.0_____-45.6____-365.0

 

3.7.6. Преобразование вещественных данных с плавающей точкой ( Real Editing with Exponents )

Ew.d[Ee] и Dw.d

 

Во всех отношениях дескрипторы D и E одинаковы (поэтому далее рассмотрен только дескриптор E), однако дескриптор D применяется к данным REAL*8, а дескриптор E ‑ к данным REAL*4.

 

При вводе:

· вводимое число может быть или целым или вещественным, а его значение не должно выходить за диапазон возможных значений соответствующей переменной;

· параметр Ee при вводе игнорируется и ввод в этом случае идентичен вводу по дескриптору Fw.d.

При выводе:

· элемент списка ВВ выводимый по дескрипторам E и D должен быть типа REAL*4 или REAL*8, иначе происходит ошибка выполнения программы;

· Форма поля вывода зависит от масштабирующего множителя kP. Поле вывода состоит из w позиций, которые при k=0 включают:

¨ позицию знака (если необходима);

¨ десятичную точку;

¨ d цифр приведенной мантиссы (т.е. мантиссы с нулевой целой частью);

¨ поле показателя степени в одной из форм, показанных в Табл. 3.C.

Дескриптор с масштабным множителем kPEw.dEe работает так:

· если -d < k £ 0, поле вывода содержит k ведущих нулей после точки и d+k значащих цифр после них;

· если 0 < k < d+2, поле вывода содержит k значащих цифр слева от точки и (d-k-1) после нее. Другие значения k приведут к ошибке.

Табл. 3.C

Вид поля показателя степени

Дескриптор Абсолютное значение показателя степени Форма показателя степени
Ew.d ½ p½ £ 99 E, затем знак (+ или ‑ ), затем 2 цифры показателя степени
Ew.d 99£ ½ p½ £ 999 знак (+ или ‑ ), затем 3 цифры показателя степени
Ew.dEe ½ p½ £ (10e) -1 E, затем знак (+ или ‑ ), затем e цифр показателя степени

 

3.7.7. Обобщенное преобразование вещественных данных ( Real Editing-Wide Range )

Gw.d[Ee]

 

Преобразование G при вводе эквивалентно преобразованию F, а при выводе ‑ преобразованию E или F в зависимости от значения величины.

Интерпретация дескриптора Gw.d (k(' ') означает k пробелов )

Абсолютное значение величины числа Интерпретация
m < 0.1 Gw.d = Ew.d
0.1 £ m < 1 Gw.d = F(w‑ 4).d и 4(' ')
1 £ m < 10 Gw.d = F(w‑ 4).(d‑ 1) и 4(' ')
10d-2 £ m < 10d-1 Gw.d = F(w‑ 4).1 и 4(' ')
10d-1 £ m < 10d Gw.d = F(w‑ 4).0 и 4(' ')
10d £ m Gw.d = Ew.d

 

Интерпретация дескриптора Gw.d[Ee] (k(' ') означает k пробелов )

Абсолютное значение величины числа Интерпретация
m < 0.1 Gw.dEe = Ew.d
0.1 £ m < 1 Gw.dEe = F(w‑ e‑ 2).d и (e+2)(' ')
1 £ m < 10 Gw.dEe = F(w‑ e‑ 2).(d‑ 1) и (e+2)(' ')
10d-2 £ m < 10d-1 Gw.dEe = F(w‑ e‑ 2).1 и (e+2)(' ')
10d-1 £ m < 10d Gw.dEe = F(w‑ e‑ 2).0 и (e+2)(' ')
10d £ m Gw.dEe = Ew.d

 

3.7.8. Преобразование логических данных ( Logical Editing )

 

Lw

 

Ширина поля ввода-вывода равна w позициям.

При вводе, поле состоит из необязательных пробелов, затем необязательной точки, затем буквы T (.TRUE.) или F (.FALSE.). Любые последующие символы игнорируются, так что значения.TRUE. и.FALSE. также возможны при вводе.

При выводе, элемент списка ВВ должен быть логического типа, иначе происходит ошибка выполнения программы. Выводится w-1 пробелов и буквы T или F.

 

3.7.9. Преобразование символьных данных ( Character Editing )

 

A[w]

 

Ширина поля ввода-вывода равна w позициям. Если w опущено, тогда оно равно числу символов элемента списка ВВ.

Если число вводимых символов меньше w, вводимое поле расширяется справа пробелами, а если больше w ‑ усекается справа до длины w.

Если длина элемента списка ВВ больше длины поля w, то выводятся первые w символов, а если меньше ‑ то расширяется справа пробелами.

Тип элемента списка ВВ может быть любым. Если он не символьного типа, то каждому байту внутреннего представления соответствует один символ. Если элемент типа INTEGER, REAL или LOGICAL, то при его инициализации может использоваться Холлеритовский тип.

3.8. Неповторяемые дескрипторы преобразования ( Nonrepeatable edit descriptors )

Обзор

К неповторяемым (т.к. непосредственно перед ними не может стоять коэффициент повторения) дескрипторам преобразования (или дескрипторам управления) относят дескрипторы, перечисленные в Табл. 3.D.

Табл. 3.D

Неповторяемые дескрипторы преобразования

Форма Имя Назначение Использование при вводе / выводе
строка Преобразование апострофа Передает строку в УВВ нет / да
nH Преобразование Холлерита Передает следующие n символов в УВВ нет / да
Tc, TLc, TRc Преобразование положения Задает позицию в записи да / да
nX Преобразование положения Задает позицию в записи да / да
SP, SS, S Преобразование знака + Управляет выводом знака + нет / да
/ Преобразование слэша Переход к следующей записи при вводе или вывод записи конец строки при выводе да / да
\ или $ Преобразование обратного слэша Продолжение текущей записи нет / да
: Прерывание формата При исчерпании списка вывода прерывает действие формата нет / да
kP Преобразование масштабного множителя Устанавливает масштабный множитель для показателя степени в дескрипторах F, E, D и G да / да
BN, BZ Интерпретация пробела Устанавливает способ интерпретации пробелов в числовых полях да / нет

 

Неповторяемые дескрипторы могут появляться между повторяемыми.

 

3.8.2. Преобразование апострофа ( Apostrophe Editing )

Если спецификатор формата состоит из символьной константы (т.е. текста, заключенного в кавычки (’) или двойные кавычки (”)), то текст внутри кавычек выводится в УВВ без какого-либо преобразования. Чтобы вывести кавычку внутри текста ее следует указать дважды или заключить текст в двойные кавычки.

 

3.8.3. Преобразование Холлерита ( Hollerinth Editing )

Дескриптор вида nH передает следующие за ним n символов в УВВ и может использоваться везде, где возможно использование символьной константы. Передаваемые им n символов называются Холлеритовской константой.

 

3.8.4. Преобразование положения ( Positional Editing )

 

Tc, TLc, TRc и nX

 

Дескрипторы T, TL и TR (дескрипторы табуляции) определяют позицию в записи, в которую или из которой будет передаваться следующий символ. Новая позиция ВВ может задаваться в любом направлении от текущего положения. Это позволяет обрабатывать при вводе одну запись более одного раза. Заметим, что переход назад более чем на 512 байтов (символов) не рекомендован.

· Дескриптор Tc определяет абсолютное положение позиции ВВ от начала записи, т.е. следующий символ передается в позицию c.

· Дескриптор TRc задает относительный сдвиг вправо от текущего положения, т.е. следующий символ передается в позицию, расположенную на c символов правее текущей.

· Дескриптор TLc задает относительный сдвиг влево от текущего положения, т.е. следующий символ передается в позицию, расположенную на c символов левее текущей. Если совершен переход за первый символ записи, то дальнейший ввод или вывод будет происходить с первой позиции. При записи, левая табуляция возможна только в пределах выведенной записи. Если выведенная запись больше, чем выделенный буфер ВВ, нельзя перейти в позицию, соответствующую предыдущему буферу.

 

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

 

Дескриптор nX передвигает текущую позицию ВВ на n символов вправо. При выводе это эквивалентно выводу n пробелов.

 

3.8.5. Преобразование знака плюс ( + ) ( Optional-Plus Editing )

Дескрипторы SP, SS и S управляют символом + при выводе чисел.

· SP ‑ вызывает вывод знака + везде, где он может быть.

· SS ‑ запрещает вывод знака + везде, где он может быть (по умолчанию).

· S ‑ восстанавливает действие дескриптора SS.

 

3.8.6. Преобразование слэша ( / ) ( Slash Editing )

Дескриптор / указывает на завершение передачи данных из/в текущую запись.

При вводе: файл устанавливается в начало следующей записи.

При выводе: завершается вывод записи (выводится метка конец записи) и начинается вывод в новую запись.

 

3.8.7. Преобразование обратного слэша ( \ ) ( Backslash Editing )

Когда формат завершается (даже если не исчерпан список ВВ), в конец записи выводится метка конец записи, т.е. следующие данные будут передаваться в новую запись. Если последним дескриптором формата указать знак \ или $, который подавляет вывод метки конец записи, тогда вывод данных будет продолжен в текущую запись.

Обратный слэш обычно употребляется при организации экранных запросов.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-09; Просмотров: 773; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.067 с.)
Главная | Случайная страница | Обратная связь