next up previous contents
След.: Запросы Выше: Ввод и вывод Пред.: Операторы сброса и ожидания   Содержание


Именованные списки ввода/вывода

Оператор NAMELIST задает список ввода/вывода, при котором выводятся не только значения, но и имена данных, а при вводе данным предписаны имена соответствующих переменных, что позволяет контролировать процесс ввода/вывода (особенно удобно читать данные, предварительно записанные этой или другой программой). Синтаксис оператора:

NAMELIST /имя/ данные

где данные перечисляются через запятую. Оператор может определять более одного списка. Пример:

REAL:: P1, P2

REAL, DIMENSION:: CURVE

NAMELIST /PARAMETERS/ P1, P2, CURVE

Подготовка параметров...

OPEN(1, FILE='par.dat')

WRITE(1, PARAMETERS) !запись параметров

В другой программе:

REAL:: P1, P2

REAL, DIMENSION:: CURVE

NAMELIST /PARAMETERS/ P1, P2, CURVE

OPEN(1, FILE='par.dat')

READ(1, PARAMETERS) !чтение параметров

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

Однако можно готовить файл для чтения и вне программы (и именно в этом случае важен контроль правильности ввода). Правила оформления данных такие: вначале -- комментарии, затем -- имя списка (то же, что и в операторе, начинающиеся с символа &). Затем идут пары имя = значение, разделяемые запятыми (могут использоваться повторители, аналогичные тем, что применяются в операторе DATA4.9)). Конец списка обозначается символом /. Данных может быть меньше нужного (тогда соответствующие переменные не получат новых значений), но не должно быть больше.

Пример из [14]:

INTEGER I; REAL X (8); CHARACTER (11) P

COMPLEX Z; LOGICAL G

NAMELIST / TODAY / G, I, P, Z, X

READ (*, NML = TODAY)

Файл для чтения содержит текст:

&TODAY I = 12345, X(1) = 12345, X(3:4) = 2*1.5, I=6, ! это комментарий.

P = ’’ISN’T_BOB’S’’, Z = (123,0)/

В результате переменные получат следующие значения: I=6, X(1) = 12345.0, X(2) не изменится, x(3:4)=1.5, X(5:8) не изменятся, P = ISN’T_BOB’S, Z = (123.0,0.0), G не изменится.

Успешное чтение предварительно выведенных данных не гарантируется Стандартом для текстовых данных и если при выводе числовых данных применялся спецификатор DELIM.



Ilya A. Chernov 2012-12-19
X