爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4583|回复: 9

[求助] fortran 编程中出现下面的错误,应该怎么修改?

[复制链接]

新浪微博达人勋

发表于 2012-5-10 15:32:30 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 洁雪纷飞 于 2012-5-10 15:33 编辑

我想把一年的366天的数据按月分成12个文件:
program main
implicit none
character month,INTYR
integer var(638,370)
integer YROD,MMMM
integer d, yearday, y4 ,y100, y400
integer i
integer,parameter:: irow=637
do YROD = 1,12
MMMM=0+YROD
month=INTYR(MMMM)
PRINT*,month
open(21,file='2004x')
open(3, file = 't2004/'//month)
d = 370
do i = 1, 1
  read(21,*)
end do
do i=1,irow
read(2,fmt="(370f8.2)") var(i,1:d)
select case(MMMM)
  case(1)
    write(3,fmt="(35f8.2)") var(i,1:35)
  case(2)
   write(3,fmt="(33f8.2)") var(i,1:4), var(i,36:64)   
  case(3)
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,65:95)
  case(4)
   write(3,fmt="(34f8.2)") var(i,1:4), var(i,96:125)
  case(5)
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,126:156)
  case(6)
   write(3,fmt="(34f8.2)") var(i,1:4), var(i,157:186)
  case(7)
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,187:217)
  case(8)
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,218:248)
  case(9)
   write(3,fmt="(34f8.2)") var(i,1:4), var(i,249:278)
  case(10)
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,279:309)
  case(11)
   write(3,fmt="(34f8.2)") var(i,1:4), var(i,310:339)
  case(12)  
   write(3,fmt="(35f8.2)") var(i,1:4), var(i,340:370)
  case default
   print *, "输入错误"
   stop
  end select
end do
close(21)
end do
close(3)
stop
end
!*----------------------------------------------------------------------*
!*                           FUNCTIONS                                  *
!*----------------------------------------------------------------------*
!*----------------------------------------------------------------------*
!*                         Integer into  character                      *
!*----------------------------------------------------------------------*
      function INTYR(MMMM)
      integer length, loc, iint, MMMM
      parameter (length = 4)
      character INTYR*(length)
      iint = MMMM
      do loc = 1, length
         INTYR(loc:loc) = ' '
      enddo
      loc = length
30    INTYR(loc:loc) = char(ichar('0') + mod(iint,10))
      iint = iint/10
      loc = loc - 1
      if (iint .gt. 0) goto 30
      return
      end
输出后显示:
{BPQ`FUNGHZ%2(ZBGKT0]AL.jpg
应该怎么修改啊?哪里有错误?求高手帮忙……

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-5-10 15:36:42 | 显示全部楼层
麻烦楼主自己翻译一下错误提示不就知道了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-10 15:37:47 | 显示全部楼层
不知道怎么修改
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-10 17:03:22 | 显示全部楼层
你没有定义month。。。后面的就不能变成t2004//month
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-5-10 17:28:05 | 显示全部楼层
初步分析结果是你没有给定“t2004”的文件夹,fortran这样写是不能自动创建文件夹的。
另外,你改好之后也可能也出不来结果,疑问如下:
语句“do i=1,irow
read(2,fmt="(370f8.2)") var(i,1:d)”
read为何此处从2
读入、何来、是否有误?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-10 22:53:40 | 显示全部楼层
文件号为3的文件不存在,楼主是不是要先确认指向的文件存在?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-11 08:44:08 | 显示全部楼层

我自己创建了一个文件夹,这样也不行吗?
后面的地方确实写错了,呵呵……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-11 08:44:45 | 显示全部楼层
godenflame135 发表于 2012-5-10 22:53
文件号为3的文件不存在,楼主是不是要先确认指向的文件存在?

这个文件夹存在,应该怎么检查什么地方呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-11 08:50:30 | 显示全部楼层
edwardli 发表于 2012-5-10 17:03
你没有定义month。。。后面的就不能变成t2004//month

定义了啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-5-11 10:34:03 | 显示全部楼层
返回month没有任何数值, 不能在文件夹t2004中创建文件
可以用语句:
write(xxxx,"(i2)") mmmm
write(month,*) trim(xxxx)

进行改写
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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