关于文件读写的问题
program mainimplicit none
integer :: ncols,nrows,xllcorner,yllcorner,cellsize,nodata
character(len=20) :: str(10)
integer :: a(4,5),i,j
open(5,file='1.txt',status='old')
open(6,file='2.txt')
! read(5,'(/////)') !本句相当于跳过了被读入文件的前六行,括号里为空时表示1行,斜杠数加1为跳过的全部行数。有一个问题需要注意,在本代码中,如果跳过行数超过6,则执行报错!
!具体原因请加群2338021向群主咨询。由于讨论這个问题时,他一直笑而不语,所以到现在我也不知道是为什么,且不知该如何自行查询......
! read(5,'(6x,i6)') ncols!注意本句和以下几句x前的数值不能包括最后的数字所占字节数,否则写入输出文件的数值为0
! read(5,'(6x,i6)') nrows
! read(5,'(11x,i6)') xllcorner
! read(5,'(11x,i6)') yllcorner
! read(5,'(10x,i6)') cellsize
! read(5,'(10x,i6)') nodata
! write(6,*) ncols !写入输出文件
! write(6,*) nrows
! write(6,*) xllcorner
! write(6,*) yllcorner
! write(6,*) cellsize
! write(6,*) nodata
do i=1,6 !此do循环作用为将输入文件前六行连字符带数值全部写入输出文件,注意如果将'(A20)'换成*,则只输出字符,没有数值
read(5,'(A20)') str(i)
write(6,*) str(i)
end do
do j=1,5
read(5,*) (a(i,j),i=1,4)
write(6,*) (a(i,j),i=1,4)
end do
pause
end
我什么时候笑而不语了?汗颜....下午有点事,一直没顾着看QQ群。
这代码得看输入文件张啥样,才知道怎么算正确,怎么算错误。
第29行
read(5,'(A20)') str(i)
!// 可修改为
read(5,'(A)') Trim(str(i))
!// 因为 str 长度是20,我们一般不需要输入完,后面的空格是多余的。 跳跳的这个帖子主要是为了介绍文件读取时候的一些技巧吧,根据我的经验,一般不要用格式化读入,否则比较麻烦 如果万不得已,数据格式很变态,比如用 214900 来表示21点49分00秒,这时候可以用格式化读入。
其他时候, read( ?? , * ) 往往是最简单,也最好用的了。 感谢大家!
页:
[1]