在fortran中读取输入文件

时间:2014-01-28 15:21:13

标签: fortran fortran90

我正在寻找一个文件,例如:

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个。 一定在某些地方出现了可怕的错误。你能帮忙吗?

2 个答案:

答案 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,如果,即我宣称int1int2是整数。

我很困惑你似乎想要阅读一行文本然后解析它,一直忽略 list-directed 输入的好处。如果你想将它解析为字符变量和两个整数以外的东西,请告诉我们。