FORTRAN 如何把txt中数据一行读成一个一维数组,并得到每个一维数组里有多少个元素?
2020-04-22
制作了一个数据文件,写了一段读取代码。代码在cvf6.0上编译通过。
具体的,你可以参考、修改、扩充。比如,定义一个二维数组,B(1000,0:30),第一维是行数,第二维的0单元记录一行数据总量,1到30单元记录数据。
具体思路和说明见程序注释(感叹号及紧跟的文字)。数据文件为文本格式,每行不超过30个数据,数据与数据之间以至少一个空格分隔,一行的长度不超过1000个字符(含空格)。
为保持代码结构清晰,以图片方式发上来(可编辑代码附后)。以下三张图,分别是数据文件、代码、输出结果。
可以编辑代码:
$freeform
! 从txt文本中读取数据(整数、实数)
character*1000 h,t
real*8 a(0:30) ! 定义为双精度实数,a(0)用来记录一行的数据数量
open(1,file='ff.txt') ! 打开数据文件
do while(.true.) ! 循环读取各行,直到文件尾
read(1,'(a)',iostat=io) h
if(io.ne.0) exit
a=0
do i=1,30
nstart=verify(h,' ') ! 定位数据起始点
t=h(nstart:) ! 用t临时存储并从中读取
nend=index(t,' ') ! 定位数据结束点
a(0)=a(0)+1 ! a(0)用来计数,最终值就是该行数据总数
read(t(1:nend),fmt=*) a(a(0))
h=t(nend:) ! 将未读取部分重新赋值给h
if(h.eq.' ') exit
end do
write(*,*) ! 打印输出该行数据
write(*,'(1x,a,i3,a)') '本行数据有',int(a(0)),' 个'
do i=1,a(0)
write(*,*) a(i)
end do
end do
end