Как избежать вывода на экран всех сообщений об ошибках формата чтения, если только один формат чтения не является правильным? - PullRequest
0 голосов
/ 01 марта 2019

Это мой простой (тестовый) код:

MODULE TEST_MODULE

USE, INTRINSIC :: ISO_C_BINDING

IMPLICIT NONE

INTEGER, PARAMETER :: IP = C_INT
INTEGER, PARAMETER :: LP = C_BOOL
INTEGER, PARAMETER :: CP = C_CHAR

INTEGER( IP ), PARAMETER :: UN = 15
INTEGER( IP )            :: DATA_00, DATA_01, DATA_02
CHARACTER(*),  PARAMETER :: FMTR = 'BASE\DATA_STORAGE.TXT'

CONTAINS

FUNCTION DATA_READING( ) RESULT( ERROR_TMP )

  LOGICAL( LP ) :: ERROR_TMP

  ERROR_TMP = .FALSE.

  OPEN( UNIT = UN, FILE = FMTR, ACTION = 'READ', STATUS = 'UNKNOWN', ERR = 100 )

      READ( UN, * , ERR = 101 ) DATA_00
      READ( UN, * , ERR = 102 ) DATA_01
      READ( UN, * , ERR = 103 ) DATA_02

  CLOSE( UNIT = UN, STATUS = 'KEEP')

  RETURN

  100 WRITE(*,*) "ERROR - NO SUCH A FILE OR FILE LOCATION !!!"
  ERROR_TMP = .TRUE.

  101 WRITE(*,*) "ERROR - FMT OF READING - DATA_TMP_00 - 101 !!!"
  ERROR_TMP = .TRUE.

  102 WRITE(*,*) "ERROR - FMT OF READING - DATA_TMP_01 - 102 !!!"
  ERROR_TMP = .TRUE.

  103 WRITE(*,*) "ERROR - FMT OF READING - DATA_TMP_02 - 103 !!!"
  ERROR_TMP = .TRUE.

  END FUNCTION DATA_READING

END MODULE TEST_MODULE


PROGRAM TEST_CODE

USE, NON_INTRINSIC :: TEST_MODULE

IMPLICIT NONE

LOGICAL( LP ) :: GLOBAL_ERR

GLOBAL_ERR = DATA_READING()

IF ( GLOBAL_ERR ) STOP ( "ERROR - DATA READING !!!" )

PRINT *, DATA_00
PRINT *, DATA_01
PRINT *, DATA_02

END PROGRAM TEST_CODE

Файл DATA_STORAGE.TXT содержит:

1407 1408 1409

Когда я запускаю программу, оназагрузит данные из указанного файла правильным способом - не будет глобального сообщения об ошибке, потому что все данные в файле имеют целочисленный тип.Например, если изменилось значение первых данных в 1407.23, которое является действительным типом, после запуска, программа выведет на экран все метки ошибок, в том числе и те, которые касаются существования глобальной ошибки.

У меня вопрос:

Как вывести на экран только метку ошибки, которая относится к данным, чей формат ввода неверен?

Код был протестирован в двух IDE:

Code::Blocks 1712 GFortan 6.3.0

Visual Studio 2010 with Intel Parallel XE 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...