Как установить переменные Fortran из входного файла? - PullRequest
1 голос
/ 20 марта 2019

У меня есть такой файл ввода:

x = 1.5
y = 2.8
z = 9.4
x = 4.2

Я хочу установить значения переменной. Итак, я делаю это:

read(1,'(A)', IOSTAT=io) str        
if (io > 0) then !error
    write(*,*) 'Check input.  Something was wrong'
    exit
else if (io < 0) then !EOF
    exit
else !read new value
    do i=1,len_trim(str)
        if (str(i:i) == "=") str(i:i) = " " !replase "=" with spaces
    end do            

    read(str, *) curvar, curval

    SELECT CASE (curvar)
    CASE ("x")
        x = curval            
    CASE ("y")
        y = curval
    CASE ("z")
        z = curval
    END SELECT

Можно ли установить переменную с именем, хранящимся в "curvar", равной значению из "curval" без "CASE SELECT"? Я полагаю, что существует более простой способ. Мне это нужно, потому что в моей программе будет гораздо больше переменных, чем три.

1 Ответ

2 голосов
/ 20 марта 2019

Если вы можете немного изменить свой файл в начале и в конце, вы можете использовать namelist .См., Например: http://jules -lsm.github.io / vn4.2 / namelists / intro.html

&namelist_name
x = 1.5
y = 2.8
z = 9.4
/

с простым кодом Фортрана

namelist /namelist_name/ x, y, z

read(unit, nml = namelist_name)

В противном случае ответ отрицательный, невозможно просто присвоить значение переменной с определенным именем из файла конфигурации, не анализируя имя и не используя какой-либо условный случай или регистр выбора, или массив указателей или что-то в этом роде.I / O списка имен Fortran делает это для вашего удобства.

Или есть библиотеки, которые могут выполнять аналогичную работу и разрешать файлы конфигурации различных форм. В этом ответе обсуждаются эти параметры в контексте аргументов командной строки.Существуют различные библиотеки для файлов конфигурации различных форм, но, например, модели прогноза погоды и прогноза климата чаще всего используют списки имен.Для моей модели я написал свой собственный синтаксический анализатор , который предоставляет больше возможностей для структурированных данных, но он не документирован и его будет сложнее использовать для других людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...