gpt4 book ai didi

用fortran解析输入文件

转载 作者:行者123 更新时间:2023-12-02 04:37:50 25 4
gpt4 key购买 nike

这是我以前的 thread 的延续.

我有一个来自不同代码的文件,我应该解析以用作我的输入。它的一个片段看起来像:

GLOBAL SYSTEM PARAMETER 
NQ 2
NT 2
NM 2
IREL 3
*************************************
BEXT 0.00000000000000E+00
SEMICORE F
LLOYD F
NE 32 0
IBZINT 2
NKTAB 936
XC-POT VWN
SCF-ALG BROYDEN2
SCF-ITER 29
SCF-MIX 2.00000000000000E-01
SCF-TOL 1.00000000000000E-05
RMSAVV 2.11362995016878E-06
RMSAVB 1.25411205586140E-06
EF 7.27534671479201E-01
VMTZ -7.72451391270293E-01
*************************************

等等。

目前我正在逐行阅读,如:

Program  readpot 
use iso_fortran_env
Implicit None
integer ::i,filestat,nq
character(len=120):: rdline
character(10)::key!,dimension(:),allocatable ::key
real,dimension(:),allocatable ::val
i=0

open(12,file="FeRh.pot_new",status="old")
readline:do
i=i+1
read(12,'(A)',iostat=filestat) rdline!(i)

if (filestat /= 0) then
if (filestat == iostat_end ) then
exit readline
else
write ( *, '( / "Error reading file: ", I0 )' ) filestat
stop
endif
end if

if (rdline(1:2)=="NQ") then
read(rdline(19:20),'(i)'),nq
write(*,*)nq
end if
end do readline

End Program readpot

因此,我必须读取每一行,手动找到与键对应的值列,然后写入(为简洁起见,我只显示了一个值)。我的问题是,这是执行此操作的正确方法吗?或者还有其他更简单的方法吗?请告诉我。

最佳答案

如果文件没有可变性,您几乎不需要解析它。假设您已经为文件中所有感兴趣的数据项声明了变量,并且这些变量的名称显示在文件的行中。例如

  INTEGER :: nq , nt, nm, irel
REAL:: scf_mix, scf_tol ! '-' not allowed in Fortran names
CHARACTER(len=48) :: label, text
LOGICAL :: semicore, lloyd
! Complete this as you wish

然后这样写一段代码

  OPEN(12,file="FeRh.pot_new",status="old") 
READ(12,*) ! Not interested in the 1st line
READ(12,*) label, nq
READ(12,*) label, nt
READ(12,*) label, nm
READ(12,*) label, irel
READ(12,*) ! Not interested in this line
READ(12,*) label, bext
READ(12,*) label, semicore
! Other lines to write
CLOSE(12)

Fortran 的列表导向 输入理解行中的空格以分隔值。它不会将这些空白作为字符变量的一部分读取。这种行为可以改变,但在你的情况下你不需要。请注意,当读入逻辑变量时,它还会将字符 F 理解为 .false.

我的代码片段只是忽略了标签和解释行。如果你有紧张的性格,你可以处理它们,也许

IF (label/='NE') STOP

或者任何你想要的。

关于用fortran解析输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21581647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com