Fortran Coder

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

[文件读写] 怎么 循环读取二维数组并赋值?

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
58 元
贡献
32 点
跳转到指定楼层
楼主
发表于 2018-9-28 10:53:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program main
    implicit none

    character(*),parameter :: infile='Depth.txt',outfile='Depth2.txt'
    integer :: i,j
    real,dimension(521,1440):: m

    OPEN(UNIT=20,FILE=infile,STATUS='OLD',ACTION='read')
    OPEN(UNIT=30,FILE=outfile,status='replace',action='write')

   do i=1,521

        READ(20,'(1440(I6))',end=99) (m(i,j),j=1,1440)

        If(m(i,j)/=-999 .and. m(i,j+1)==-999) then
            m(i,j)=2                         ! 1 represents ocean
            m(i,j-1)=2                       ! 2 represents coastline
            m(i,j-2)=2                       ! -999 represents land
            m(i,j-3)=2

        else if(m(i,j)==-999 .and. m(i,j+1)/=-999) then
            m(i,j)=2
            m(i,j+1)=2
            m(i,j+2)=2
            m(i,j+3)=2

        else if (m(i,j)<200) then
            m(i,j)=2
        else
            m(i,j)=1
        End if


        write(30,'(1440(I6))') (m(i,j),j=1,1440)
        end do

!100 format (1440I6)
99 stop
end program main

在 if 条件判断那里出了问题,不知道能不能这样读?请大家帮忙看看,读写都没问题,循环读取 赋值就开始出错


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

6

帖子

2

主题

0

精华

入门

F 币
58 元
贡献
32 点
沙发
 楼主| 发表于 2018-9-28 10:54:53 | 只看该作者
请大家帮忙看看,读写都没问题,循环读取 赋值就开始出错

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

板凳
发表于 2018-9-28 14:31:59 | 只看该作者
吃饭叫我 发表于 2018-9-28 10:54
请大家帮忙看看,读写都没问题,循环读取 赋值就开始出错

do i=1,521
      READ(20,'(1440(I6))',end=99) (m(i,j),j=1,1440)
      If(m(i,j)/=-999 .and. m(i,j+1)==-999) then ! variable "j" undefined

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

地板
发表于 2018-9-28 14:38:39 | 只看该作者
do i=1,521                                                            
  READ(20,'(1440(I6))',end=99) (m(i,j),j=1,1440)                       
                                                                       
  DO j = (1+3), (1440-3)                                               
    if(m(i,j)/=-999 .and. m(i,j+1)==-999) then                        
        m(i,j)=2                         ! 1 represents ocean         
        m(i,j-1)=2                       ! 2 represents coastline      
        m(i,j-2)=2                       ! -999 represents land        
        m(i,j-3)=2                                                     
    else if(m(i,j)==-999 .and. m(i,j+1)/=-999) then                    
        m(i,j)=2                                                      
        m(i,j+1)=2                                                     
        m(i,j+2)=2                                                     
        m(i,j+3)=2                                                     
    else if (m(i,j)<200) then                                          
        m(i,j)=2                                                      
    else                                                               
        m(i,j)=1                                                      
    end if                                                            
  END DO
                                                                       
  write(30,'(1440(I6))') (m(i,j),j=1,1440)                             
end do                                                                 

6

帖子

2

主题

0

精华

入门

F 币
58 元
贡献
32 点
5#
 楼主| 发表于 2018-10-7 20:58:48 | 只看该作者
chiangtp 发表于 2018-9-28 14:38
do i=1,521                                                            
  READ(20,'(1440(I6))',end=9 ...

C:\Users\zhou\Desktop\QQ截图20181007205518.png

谢谢,这个确实是我疏忽了,不过改了之后变成了这样。循环读取和赋值 的结果都变成了 * 是格式不对吗
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-27 10:21

Powered by Tencent X3.4

© 2013-2024 Tencent

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