我正在寻找一个文件,例如:
NE 32 0
IBZINT 2
NKTAB 936
XC-POT VWN
ITER 29
MIX 2.00000000000000E-01
TOL 1.00000000000000E-05
我认为我正在寻找index
intrinsic
,并正在编写相应的代码:
编辑代码已更新,
Implicit None
integer ::i,pos
character(50) :: name
character(len=16),dimension(100)::key,val
key(1)="NE"
open(12,file="FeRh/FeRh.pot_new",status="old")
do i=1,100
read(12,*)name
if (name(1:2)==key(1))then
write(*,*)"find NE"
write(*,*)name(1:2)
write(*,*)name(index("NE","")+21)
endif
end do
close(12)
!write(*,*)index(key(1),"")
End Program readpot
我希望在第3个write
声明中有32个。
一定在某些地方出现了可怕的错误。你能帮忙吗?
答案 0 :(得分:1)
如果要从文件中读取一行,则使用列表导向(*
作为格式)输入。这不是你想要的,因为运行时会有一些有限的解析。
也就是说,第一条记录上的read(12,*) name
将导致"NE"
填充变量name
中的大量空格,因为记录将在空格上分割。
如果您想要name
中的整行,请使用'(A)'
中的格式read
。
一旦有了这一行,就可以进行进一步的解析。但是,从您显示的内容index
似乎没有帮助,特别是当您检查空子字符串时。你知道密钥的长度(使用len_trim
),所以如果你有匹配,就知道第一个分隔符的位置。
答案 1 :(得分:0)
如果我想读一行如
NE 32 0
我会写一个声明,例如
read(12,*) name, int1, int2
并希望我的处理器将name
设置为NE
,将int1
设置为32
,将int2
设置为0
,如果,即我宣称int1
和int2
是整数。
我很困惑你似乎想要阅读一行文本然后解析它,一直忽略 list-directed 输入的好处。如果你想将它解析为字符变量和两个整数以外的东西,请告诉我们。