如何从FORTRAN字符串读取数值数据(How to read numeric data from

2019-10-20 11:45发布

我在FORTRAN字符串数组作为 '的结果:CI-能源--- TH = 89的pH = 120'。 如何提取字符从字符串“120”,并存储成一个真正的变量?

该字符串被写入文件“input.DAT”英寸 我已经写了FORTRAN代码:

implicit real*8(a-h,o-z)
character(39)  line
open(1,file='input.DAT',status='old')
read(1,'(A)') line,phi
write(*,'(A)') line
write(*,*)phi
end

运行后它显示:

At line 5 of file string.f (unit = 1, file = 'input.dat')
Fortran runtime error: End of file

我已经给“39”作为字符数组的维数,因为有39个字符,包括字符串高达“120”在“空间”。

Answer 1:

假设你想在字符串中的最后一个等号后读取出现的实数,您可以使用扫描固有功能找到该位置,然后从字符串的其余部分阅读次数,如下面的程序。

program xreadnum
implicit none
integer :: ipos
integer, parameter :: nlen = 100
character (len=nlen) :: str
real :: xx
str  = "results: CI- Energies --- th= 89 ph=120"
ipos = scan(str,"=",back=.true.)
print*,"reading real variable from '" // trim(str(1+ipos:)) // "'"
read (str(1+ipos:),*) xx
print*,"xx = ",xx
end program xreadnum
! gfortran output:
! reading real variable from '120'
! xx =    120.000000    


Answer 2:

为了字符串转换s成为真正的类型变量r

READ(s, "(Fw.d)") r

这里w是总场宽度和d是数字的小数点后的位数。 如果输入字符串没有小数点,值wd可能会影响结果,例如

s = '120'
READ(s, "(F3.0)") r ! r <-- 120.0
READ(s, "(F3.1)") r ! r <--  12.0

答案如果所有的字符串是由固定宽度的字段组成(如何提取与特定数量转换子)在很大程度上取决于输入字符串,例如格式问题的另一部分,有可能跳过串不着边际的一部分:

s = 'a=120'
READ(s(3:), "(F3.0)") r


文章来源: How to read numeric data from a string in FORTRAN