FORTRAN 如何把txt中数据一行读成一个一维数组,并得到每个一维数组里有多少个元素?

2025-01-19 23:02:00
推荐回答(1个)
回答1:

制作了一个数据文件,写了一段读取代码。代码在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