Fortran Coder

查看: 62|回复: 4

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

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
40 元
贡献
23 点
发表于 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 币
40 元
贡献
23 点
 楼主| 发表于 2018-9-28 10:54:53 | 显示全部楼层
请大家帮忙看看,读写都没问题,循环读取 赋值就开始出错

93

帖子

3

主题

0

精华

版主

F 币
456 元
贡献
279 点

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

发表于 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

93

帖子

3

主题

0

精华

版主

F 币
456 元
贡献
279 点

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

发表于 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 币
40 元
贡献
23 点
 楼主| 发表于 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

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

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2018-10-24 01:10

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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