Fortran Coder

标题: 关于fortran 提取文件数据 新手 [打印本页]

作者: wxy    时间: 2017-1-21 11:47
标题: 关于fortran 提取文件数据 新手
导师要求用Fortran写个积温程序 本人程序新小白首先第一步提取文件都不会,想要开学之前做出来,希望各位大神帮忙给个思路也可以,这是一个气象文件
1,想要提取DATE   TMAX  TMIN  至新文件中,
2,date一列的意思是几几年第几天比如81001是81年第一天 这个文件是30多年的 我想要每一年分别放入一个文件中,并且还有闰年平年之分,

QQ截图20170121113910.png (20.93 KB, 下载次数: 438)

QQ截图20170121113910.png

作者: li913    时间: 2017-1-21 15:52
1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就个半小时;
3、每年分存不同文件,可以看看群共享里面《fortran批量处理文件》;
4、你得拿出你的代码,别人才方便给你意见。
作者: wxy    时间: 2017-1-21 17:35
嗯嗯 谢谢
作者: wxy    时间: 2017-1-21 19:13
这是我写的代码,我想把四列数读入数组,然后数组间做运算,但是 运行错误bad integer for item 1 in list input,不知道怎么改,你帮我看一下吧
[Fortran] 纯文本查看 复制代码
PROGRAM EX
implicit none
INTEGER M,I
REAL,ALLOCATABLE:: A(:),B(:),C(:),D(:),E(:)
OPEN(8,FILE="CN003830.wth")
READ(8,*)M
ALLOCATE(A(M),B(M),C(M),D(M),E(M))
DO I=3,M
READ(8,*)A(I),B(I),C(I),D(I),E(I)
ENDDO
DO I=3,M
WRITE(*,*)A(I),B(I),C(I),D(I),E(I)
ENDDO
END



QQ截图20170121191001.png (20.28 KB, 下载次数: 430)

QQ截图20170121191001.png

作者: wxy    时间: 2017-1-21 20:07
li913 发表于 2017-1-21 15:52
1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就 ...

楼上是我写的代码 你有时间帮我看一下吧@li913
作者: vvt    时间: 2017-1-22 10:55
[Fortran] 纯文本查看 复制代码
program ex
  implicit none
  integer m,i
  integer , allocatable :: days(:)
  real , allocatable :: tMax(:) , tMin(:)
  real :: srad
  open(8,file="cn003830.wth")
  !read(8,*)m  !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
  m = 300 !//我假设是300个
  allocate(days(m),tMax(m),tMin(m))
  do i = 1,4
    read(8,*)
  end do !//跳过前4行
  do i = 1,m
    read(8,*) days(i) , srad , tMax(i) , tMin(i)
    write(*,*) days(i) , tMax(i) , tMin(i)
  enddo
end program ex

作者: wxy    时间: 2017-1-22 11:30
vvt 发表于 2017-1-22 10:55
[mw_shl_code=fortran,true]program ex
  implicit none
  integer m,i

谢谢,请问real :: srad起什么作用
作者: vvt    时间: 2017-1-22 17:19
定义一个real变量,名叫srad
作者: wxy    时间: 2017-1-23 08:52
本帖最后由 wxy 于 2017-1-23 16:23 编辑
vvt 发表于 2017-1-22 17:19
定义一个real变量,名叫srad

好的 谢谢
作者: wxy    时间: 2017-1-23 09:31
本帖最后由 wxy 于 2017-1-23 12:34 编辑
wxy 发表于 2017-1-23 08:52
我在试着把这个获取文件行数的代码放到这个代码里面自动赋值给m,理论上是对的吗,昨天试了一晚上赋值给m ...

然后就是别人提供一个思路把第一列除以1000舍去小数部分剩下整数部分就是年份,这样可以判断年份 相同的年份输出到一个文件中,但是除以1000的语句和判断年份的语句怎么改也不对
[Fortran] 纯文本查看 复制代码
program ex
  implicit none
  integer m,i
  INTEGER , allocatable :: days(:),year(:)
  real , allocatable :: tMax(:) , tMin(:) , rain(:)
  real :: srad
  open(8,file="cn003830.wth")
  !read(8,*)m  !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
  open(10,file="test.wth")
  open(11,file="A:\EX\test.wth")
  m = 10592 !//我假设是300个
  allocate(year(m),days(m),tMax(m),tMin(m),rain(m))
  do i = 1,4
    read(8,*)
  end do !//跳过前4行
  do i = 1,m
    read(8,*)year(i), days(i) , srad , tMax(i) , tMin(i) , rain(i)
  end do
  close(8)
  year(I)=days(i)/1000
  WHERE (year(i)=year(i)+1)

    write(10,"(i5.5,2xf5.1,2xf5.1,2xf4.1)") days(i) , tMax(i) , tMin(i) , rain(i)

  ELSE WHERE
    write(11,"(i5.5,2xf5.1,2xf5.1,2xf4.1)") days(i) , tMax(i) , tMin(i) , rain(i)

  end where
end program ex

作者: vvt    时间: 2017-1-23 18:24
你的基础知识太薄弱,建议看看书。
基础的数组用法,循环,你还比较混乱。




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