用fortran语言读取输入文件
我正在寻找一个文件,如:用fortran语言读取输入文件,fortran,fortran90,Fortran,Fortran90,我正在寻找一个文件,如: NE 32 0 IBZINT 2 NKTAB 936 XC-POT VWN ITER 29 MIX 2.00000000000000E-01 TOL 1.00000000000000E-05 我在想我要找的是索引内在的,并据此编写了一个代码: 编辑代码已更新 Implicit None integer ::i,
NE 32 0
IBZINT 2
NKTAB 936
XC-POT VWN
ITER 29
MIX 2.00000000000000E-01
TOL 1.00000000000000E-05
我在想我要找的是索引
内在的
,并据此编写了一个代码:
编辑代码已更新
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
我希望在第三个语句中有32个。
一定是哪里出了大问题。您能帮忙吗?当您想从文件中读取一行时,请使用列表导向(*
作为格式)输入。这不是您想要的,因为运行时会有一些有限的解析
也就是说,第一条记录上的read(12,*)name
将导致“NE”
在变量name
中填充大量空格,因为该记录将在空格上拆分
由于您希望在name
中输入整行,请使用read
中的格式'(A)
一旦你有了那一行,你就可以做进一步的解析了。然而,从您显示的索引似乎没有帮助,尤其是在检查空子字符串时。您知道键的长度(使用len_trim
),因此,如果您有匹配项,您就知道第一个分隔符的位置。如果我想读取一行,例如
NE 32 0
我会写一份声明,比如
read(12,*) name, int1, int2
并且期望我的处理器将name
设置为NE
,int1
设置为32
,int2
设置为0
,如果我已经声明int1
和int2
为整数
我感到困惑的是,您似乎想要阅读一行文本,然后对其进行解析,而忽略了列表定向输入的好处。如果您确实想将其解析为字符变量和两个整数以外的内容,请告诉我们。出现“严重错误”的症状是什么?但是,缺少读取
可能没有帮助。在第三次写入中,您似乎缺少了一个:
。这是否意味着是名称(索引(“NE”,即“”):21)
?我想读取所有值,NE 32 0只是一个最小的示例,稍后我需要在主程序中使用它。我如何解析它?如果你想读一行,其中包含一个短字符串,后跟两个整数,都用空格分隔,请遵循我的建议。如果您需要以其他方式解析该行,请解释如何解析。我认为问题是,他需要根据关键字的不同格式的顶级读取行。将整行作为字符串读取,然后有条件地(列表)读取字符串是一个好方法。