首页 > 解决方案 > 当输入文件既有整数又有文本时,如何在fortran90中正确读取整数?

问题描述

这是我的数据文件a.txt

01 12  00 10  Nothing to do

为了清楚起见,让我用 * 标记空格01*12**00*10**Nothing*to*do

我正在尝试用 fortran90 代码阅读它

implicit none
integer           :: a,b,c,d
character(len=16) :: ch

print*,"Case1"
open(unit=10,file="a.txt", form="formatted")
read(10,*)a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)

print*,"Case2"
open(unit=10,file="a.txt", form="formatted")
read(10,"(4i2,a16)")a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)

print*,"Case3"
open(unit=10,file="a.txt", form="formatted")
read(10,"(4(i2,1x),a16)")a,b,c,d,ch
write(*,"(4(i2.2,1x),a16)")a,b,c,d,ch
close(10)

end

这是输出

 Case1
01 12 00 10 Nothing         
 Case2
01 01 02 00 0 10  Nothing to
 Case3
01 12 00 01   Nothing to do 

如您所见,当我没有指定数据类型(Case1)时,整数被正确读取,但字符未被正确读取。当我将它们指定为整数(Case2)时,前导0被忽略,每个数字都被认为给出了错误的字符串。当我还将空格指定为1x(Case3)时,前两个整数被正确读取,但由于有两个空格,它无法拾取第三个整数。由于不可能总是知道给定文件中的所有空格,因此这种方法也不是很实用。

如何正确读取这些数据?

我得到了与gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC),gcc version 8.2.0 (GCC)和相同的结果ifort version 19.0.3.199

编辑

如果输入仅包含整数,则可以使用在 Fortran 中读取具有未知界限的行中的整数序列中描述的方法

implicit none
integer           :: nums(4)
character(len=30) :: ch, ch1

open(unit=10,file="a.txt", form="formatted")
read(10,"(a)")ch
read(ch,*) nums,ch1

write(*,"(a)")ch
write(*,"(4(i2.2,1x),a16)")nums,ch1

close(10)
end

我们回到案例1。

01 12  00 10  Nothing to do   
01 12 00 10 Nothing 

标签: integerfortran90

解决方案


推荐阅读