如何从FORTRAN中的字符串中读取数字数据

时间:2014-07-15 15:04:32

标签: string io fortran gfortran

我在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个字符,包括'空格'在字符串upto' 120'。

2 个答案:

答案 0 :(得分:3)

假设您想要读取的实数出现在字符串中的最后一个等号后面,您可以使用SCAN内部函数找到该位置,然后从字符串的其余部分读取数字,如下所示程序

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    

答案 1 :(得分:1)

将字符串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
相关问题