Fortran Coder

查看: 26940|回复: 10

[文件读写] 关于fortran 提取文件数据 新手

[复制链接]

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
发表于 2017-1-21 11:47:59 | 显示全部楼层 |阅读模式
导师要求用Fortran写个积温程序 本人程序新小白首先第一步提取文件都不会,想要开学之前做出来,希望各位大神帮忙给个思路也可以,这是一个气象文件
1,想要提取DATE   TMAX  TMIN  至新文件中,
2,date一列的意思是几几年第几天比如81001是81年第一天 这个文件是30多年的 我想要每一年分别放入一个文件中,并且还有闰年平年之分,
QQ截图20170121113910.png

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-1-21 15:52:52 | 显示全部楼层
1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就个半小时;
3、每年分存不同文件,可以看看群共享里面《fortran批量处理文件》;
4、你得拿出你的代码,别人才方便给你意见。

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-21 17:35:00 | 显示全部楼层
嗯嗯 谢谢
回复

使用道具 举报

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-21 19:13:52 | 显示全部楼层
这是我写的代码,我想把四列数读入数组,然后数组间做运算,但是 运行错误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

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-21 20:07:02 | 显示全部楼层
li913 发表于 2017-1-21 15:52
1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就 ...

楼上是我写的代码 你有时间帮我看一下吧@li913

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-1-22 10:55:52 | 显示全部楼层
[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

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-22 11:30:04 | 显示全部楼层
vvt 发表于 2017-1-22 10:55
[mw_shl_code=fortran,true]program ex
  implicit none
  integer m,i

谢谢,请问real :: srad起什么作用

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-1-22 17:19:13 来自移动端 | 显示全部楼层
定义一个real变量,名叫srad

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-23 08:52:20 | 显示全部楼层
本帖最后由 wxy 于 2017-1-23 16:23 编辑
vvt 发表于 2017-1-22 17:19
定义一个real变量,名叫srad

好的 谢谢

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-1-23 09:31:38 | 显示全部楼层
本帖最后由 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
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-3-29 06:05

Powered by Tencent X3.4

© 2013-2024 Tencent

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