我在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”在“空间”。
假设你想在字符串中的最后一个等号后读取出现的实数,您可以使用扫描固有功能找到该位置,然后从字符串的其余部分阅读次数,如下面的程序。
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
为了字符串转换s
成为真正的类型变量r
READ(s, "(Fw.d)") r
这里w
是总场宽度和d
是数字的小数点后的位数。 如果输入字符串没有小数点,值w
和d
可能会影响结果,例如
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