利用fortran编程读取连续多个文件数据
2013-11-08 11:30阅读:
下面是之前做硕士毕业论文处理数据时用fortran90语言编写的一个读取文件数据的小程序代码。程序的功能是可以将多个文件中的指定行的数据读出并写入到同一个文档中。当时有100多个文件,要从这些文件中读取某一行或者是某几行数据然后存到文档中,再利用文档中的数据进行绘图。如果手动复制粘贴,工作量比较大,而且容易出错,当时时间也比较紧。没办法,只好在晚饭后利用曾经自学的可怜的一点fortran语言再加上万能的百度和谷歌搜索憋出了下面的小程序,虽然很简单,但是很实用。为免以后忘记,在此记录一下。(用来读取数据的文件命名必须有一定规律,这样程序才能连续打开文件并读取数据)
! readcore.f90
!
! FUNCTIONS:
! read data of core
!
!****************************************************************************
!
! PROGRAM: readcore5
!
! PURPOSE:
用来从输出文件中提取出被标记的束核内5个粒子信息
!
10万个粒子为6D水袋分布,数据行数等于粒子
ID号
!****************************************************************************
program readdata
implicit none
character (len=3) ::
order !
fort文件的后缀3个数字
character (len=150) ::
buffer
integer
:: n
!连续读取文件循环的数字
integer count
integer error
!DTL
TANK1粒子信息,命名为Id.txt
open
(unit=11,file='71197.txt',status='replace')
open
(unit=12,file='53313.txt',status='replace')
open
(unit=13,file='18055.txt',status='replace')
open
(unit=14,file='82349.txt',status='replace')
open
(unit=15,file='26759.txt',status='replace')
open
(unit=16,file='core5.txt',status='replace')
!读取TANK1每一聚焦周期后的粒子信息
do n=100,164,4
count=0
write (order,'(I3)') n
!将整型变量转换为字符型变量
open
(unit=10,file='fort.'//trim(adjustl(order)),status='old')
!打开文件逐行读取数据
do
while(.true.)
read (10,'(A150)',iostat=error)
buffer
!读取一整行的数据到buffer里
count=count 1
!每读一次count
1,count相当于行数
select case
(count)
case (71197)
write (11,'(A)')
buffer
write (16,'(A)')
buffer
case (53313)
write (12,'(A)')
buffer
write (16,'(A)')
buffer
case (18055)
write (13,'(A)')
buffer
write (16,'(A)')
buffer
case (82349)
write (14,'(A)')
buffer
write (16,'(A)')
buffer
case (26759)
write (15,'(A)')
buffer
write (16,'(A)')
buffer
end select
if (error/=0) exit
end do
close (10)
end do
!读取TANK2每一聚焦周期后的粒子信息
do n=203,235,4
count=0
write (order,'(I3)') n
!将整型变量转换为字符型变量
open
(unit=10,file='fort.'//trim(adjustl(order)),status='old')
!打开文件逐行读取数据
do while(.true.)
read (10,'(A150)',iostat=error)
buffer
!读取一整行的数据到buffer里
count=count 1
select case
(count)
case (71197)
write (11,'(A)')
buffer
write (16,'(A)')
buffer
case (53313)
write (12,'(A)')
buffer
write (16,'(A)')
buffer
case (18055)
write (13,'(A)')
buffer
write (16,'(A)')
buffer
case (82349)
write (14,'(A)')
buffer
write (16,'(A)')
buffer
case (26759)
write (15,'(A)')
buffer
write (16,'(A)')
buffer
end select
if (error/=0) exit
end do
close (10)
end do
!读取TANK3每一聚焦周期后的粒子信息
do n=301,329,4
count=0
write (order,'(I3)') n
!将整型变量转换为字符型变量
open
(unit=10,file='fort.'//trim(adjustl(order)),status='old')
!打开文件逐行读取数据
do while(.true.)
read (10,'(A150)',iostat=error)
buffer
!读取一整行的数据到buffer里
count=count 1
select case
(count)
case (71197)
write (11,'(A)')
buffer
write (16,'(A)')
buffer
case (53313)
write (12,'(A)')
buffer
write (16,'(A)')
buffer
case (18055)
write (13,'(A)')
buffer
write (16,'(A)')
buffer
case (82349)
write (14,'(A)')
buffer
write (16,'(A)')
buffer
case (26759)
write (15,'(A)')
buffer
write (16,'(A)')
buffer
end select
if (error/=0) exit
end do
close (10)
end do
!读取TANK4每一聚焦周期后的粒子信息
do n=402,426,4
count=0
write (order,'(I3)') n
!将整型变量转换为字符型变量
open
(unit=10,file='fort.'//trim(adjustl(order)),status='old')
!打开文件逐行读取数据
do while(.true.)
read (10,'(A150)',iostat=error)
buffer
!读取一整行的数据到buffer里
count=count 1
select case
(count)
case (71197)
write (11,'(A)')
buffer
write (16,'(A)')
buffer
case (53313)
write (12,'(A)')
buffer
write (16,'(A)')
buffer
case (18055)
write (13,'(A)')
buffer
write (16,'(A)')
buffer
case (82349)
write (14,'(A)')
buffer
write (16,'(A)')
buffer
case (26759)
write (15,'(A)')
buffer
write (16,'(A)')
buffer
end select
if (error/=0) exit
end do
close (10)
end do
close (11)
close (12)
close (13)
close (14)
close (15)
close (16)
stop
end program