Разбор аргументов командной строки в виде строк для хранения целых чисел в Фортране

Я следую учебному пособию по Фортрану, однако приведенный ниже код не работает. Я пытаюсь прочитать 2-значное число из командной строки, однако я получаю сообщение об ошибке UNIT спецификации в "TRIM(буфер)" должно быть выражением INTEGER или переменной CHARACTER.

INTEGER :: number
CHARACTER(LEN=20) :: buffer

buffer = ""
CALL GET_COMMAND_ARGUMENT(1, buffer)
READ(TRIM(buffer), FMT="(I2)") number

Итак, проблема, насколько я понимаю, в том, что READ не уверен, что вывод TRIM вернет значение CHARACTER. Могу ли я как-то объявить, что это ХАРАКТЕР или есть другой способ обойти эту проблему?

Для чего это стоит я использую гфортран.

1 ответ

Решение

TRIM(buffer) действительно возвращает значение символа. Это, однако, выражение, а не переменная. Как следует из сообщения об ошибке, выражение подходит для указания номера единицы, но в случае чтения из символа требуется переменная.

Как TRIM будет действовать просто для обеспечения значения с пробелами, удаленными из buffer, это не нужно: пробелы не повлияют на чтение. Вместо этого просто пойти на

read(buffer, '(I2)') number

или даже

read(buffer(1:2), '(I2)') number

В более общем случае, переменной может быть присвоено более сложное символьное выражение, и эта последняя переменная используется в контексте чтения.

Другие вопросы по тегам