我在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'。
答案 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
是小数点后的位数。如果输入字符串中没有小数点,则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