wxy 发表于 2017-1-21 11:47:59

关于fortran 提取文件数据 新手

导师要求用Fortran写个积温程序 本人程序新小白首先第一步提取文件都不会,想要开学之前做出来,希望各位大神帮忙给个思路也可以,这是一个气象文件
1,想要提取DATE   TMAXTMIN至新文件中,
2,date一列的意思是几几年第几天比如81001是81年第一天 这个文件是30多年的 我想要每一年分别放入一个文件中,并且还有闰年平年之分,

li913 发表于 2017-1-21 15:52:52

1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就个半小时;
3、每年分存不同文件,可以看看群共享里面《fortran批量处理文件》;
4、你得拿出你的代码,别人才方便给你意见。

wxy 发表于 2017-1-21 17:35:00

嗯嗯 谢谢:-loveliness:

wxy 发表于 2017-1-21 19:13:52

这是我写的代码,我想把四列数读入数组,然后数组间做运算,但是 运行错误bad integer for item 1 in list input,不知道怎么改,你帮我看一下吧
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


wxy 发表于 2017-1-21 20:07:02

li913 发表于 2017-1-21 15:52
1、如果你有其他语言的编程经验,上手很快,但如果没有,认真看书;
2、读文件的操作需要你去看看书,也就 ...
楼上是我写的代码 你有时间帮我看一下吧@li913

vvt 发表于 2017-1-22 10:55:52

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:04

vvt 发表于 2017-1-22 10:55
program ex
implicit none
integer m,i


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

vvt 发表于 2017-1-22 17:19:13

定义一个real变量,名叫srad

wxy 发表于 2017-1-23 08:52:20

本帖最后由 wxy 于 2017-1-23 16:23 编辑

vvt 发表于 2017-1-22 17:19
定义一个real变量,名叫srad
好的 谢谢

wxy 发表于 2017-1-23 09:31:38

本帖最后由 wxy 于 2017-1-23 12:34 编辑

wxy 发表于 2017-1-23 08:52
我在试着把这个获取文件行数的代码放到这个代码里面自动赋值给m,理论上是对的吗,昨天试了一晚上赋值给m ...
然后就是别人提供一个思路把第一列除以1000舍去小数部分剩下整数部分就是年份,这样可以判断年份 相同的年份输出到一个文件中,但是除以1000的语句和判断年份的语句怎么改也不对
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
页: [1] 2
查看完整版本: 关于fortran 提取文件数据 新手