Оператор чтения Fortran, читающий за пределами строки

, знаете ли вы, если следующее утверждение гарантировано одним из стандартов fortran 90/95/2003? "Предположим, что оператору чтения для символьной переменной дана пустая строка (т. е. содержащая только пробелы и новую строку символов) .Если формат спецификатор - это звездочка (*), он продолжает читать последующие строки, пока не будет найдена непустая строка. Если спецификатор формата '(A)', символьная переменная заменяется пустой строкой. "

Например, посмотрите следующую минимальную программу и входной файл.

программный код:

PROGRAM chk_read
  INTEGER,         PARAMETER :: MAXLEN=30
  CHARACTER(len=MAXLEN)      :: str1, str2

  str1='minomonta'
  read(*,*)     str1
  write(*,'(3A)')  'str1_start|', str1, '|str1_end'

  str2='minomonta'
  read(*,'(A)') str2
  write(*,'(3A)')  'str2_start|', str2, '|str2_end'

END PROGRAM chk_read

входной файл:

----'input.dat' content is below this line----

yamanakako

kawaguchiko    
----'input.dat' content is above this line----

Обратите внимание, что в 'input.dat' четыре строки, а первая и третья строки пусты (содержат только пробелы и символы новой строки). Если я запускаю программу как

$ ../chk_read < input.dat > output.dat 

, я получаю следующий результат

----'output.dat' content is below this line----
str1_start|yamanakako                    |str1_end
str2_start|                              |str2_end
----'output.dat' content is above this line----

Первый оператор чтения для переменной 'str1', кажется, смотрит на первую строку 'input.dat', находит пустую строку, переходит к во второй строке найдите значение символа «yamanakako» и сохраните его в «str1».

Напротив, второй оператор чтения для переменной 'str2', кажется, получает третью строку, которая пуста, и сохраняет пустую строку в 'str2', не переходя к четвертой строке.

Я попытался скомпилировать программу на Intel Fortran (ifort 12.0.4) и GNU Fortran (gfortran 4.5.0) и получил тот же результат.

Немного об истории вопроса: я пишу подпрограмму для чтения файла данных, который использует пустую строку в качестве разделителя блоков данных. Я хочу убедиться, что пустая строка и только пустая строка выбрасываются при чтении данных. Мне также нужно сделать его стандартным и портативным.

Спасибо за вашу помощь.

6
задан norio 28 November 2011 в 12:51
поделиться