Fortran Coder

标题: 关于文件读写的问题 [打印本页]

作者: Felix804665    时间: 2014-2-21 16:02
标题: 关于文件读写的问题
[Fortran] 纯文本查看 复制代码
program main
implicit 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




作者: fcode    时间: 2014-2-21 17:43
我什么时候笑而不语了?汗颜....下午有点事,一直没顾着看QQ群。

这代码得看输入文件张啥样,才知道怎么算正确,怎么算错误。

第29行

[Fortran] 纯文本查看 复制代码
        read(5,'(A20)') str(i)
!// 可修改为
        read(5,'(A)') Trim(str(i))
!// 因为 str 长度是20,我们一般不需要输入完,后面的空格是多余的。

作者: 珊瑚虫    时间: 2014-2-21 21:24
跳跳的这个帖子主要是为了介绍文件读取时候的一些技巧吧,根据我的经验,一般不要用格式化读入,否则比较麻烦
作者: 楚香饭    时间: 2014-2-21 21:51
如果万不得已,数据格式很变态,比如用 214900 来表示21点49分00秒,这时候可以用格式化读入。

其他时候, read( ?? , * ) 往往是最简单,也最好用的了。
作者: Felix804665    时间: 2014-2-22 17:28
感谢大家!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2