Разбор аргументов командной строки в виде строк для хранения целых чисел в Фортране
Я следую учебному пособию по Фортрану, однако приведенный ниже код не работает. Я пытаюсь прочитать 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
В более общем случае, переменной может быть присвоено более сложное символьное выражение, и эта последняя переменная используется в контексте чтения.