Fortran Coder

查看: 11682|回复: 4
打印 上一主题 下一主题

[文件读写] 关于文件读写的问题

[复制链接]

13

帖子

6

主题

0

精华

熟手

F 币
114 元
贡献
81 点
跳转到指定楼层
楼主
发表于 2014-2-21 16:02:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
[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



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

13

帖子

6

主题

0

精华

熟手

F 币
114 元
贡献
81 点
5#
 楼主| 发表于 2014-2-22 17:28:09 | 只看该作者
感谢大家!
回复

使用道具 举报

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 2014-2-21 21:51:20 | 只看该作者
如果万不得已,数据格式很变态,比如用 214900 来表示21点49分00秒,这时候可以用格式化读入。

其他时候, read( ?? , * ) 往往是最简单,也最好用的了。

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

板凳
发表于 2014-2-21 21:24:52 | 只看该作者
跳跳的这个帖子主要是为了介绍文件读取时候的一些技巧吧,根据我的经验,一般不要用格式化读入,否则比较麻烦

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2014-2-21 17:43:35 | 只看该作者
我什么时候笑而不语了?汗颜....下午有点事,一直没顾着看QQ群。

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

第29行

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

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 16:58

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表