hpa 发表于 2020-3-1 09:56:59

求助思路(Fortran函数)

使用函数,给一个10000行15列的数组的每一行进行编号(该数组是从上到下按时间顺序排列的,第一行为1954年1月1日,编号应编为1,第三十二行为1953年2月1日,编号应编为32,以此类推,需要编到2007年),在调用时直接使用call就可以调用该行数据,求思路。

Qilin 发表于 2020-3-1 10:06:06

彭国伦书上有一个程序可以给文件的每一行添加行号,可供你参考,程序如下:
program ex0909
implicit none
integer,parameter :: inputfileid=10,outputfileid=11
integer,parameter :: maxbuffer=200
character(len=80) :: inputfile,outputfile
character(len=maxbuffer) buffer
integer count
integer error
logical alive

write(*,*) "Input Filename: "
read(*,"(A80)") inputfile
write(*,*) "Output Filename: "
read(*,"(A80)") outputfile

inquire(file=inputfile,exist=alive)
if(.not. alive) then
    write(*,*) trim(inputfile), " doesn't exist."
    stop
end if

open(unit=inputfileid,file=inputfile,status="old")
open(unit=outputfileid,file=outputfile,status="replace")
count=1
do while(.true.)
    read(inputfileid,"(A200)",iostat=error) buffer
    if(error/=0) exit
    write(outputfileid,"(I3,'. ',A)") count,trim(buffer)
    count=count+1
end do
close(inputfileid)
close(outputfileid)
pause
stop
end program ex0909

li913 发表于 2020-3-1 11:08:02

如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号一起复制,粘贴到其他位置。

hpa 发表于 2020-3-1 11:08:20

Qilin 发表于 2020-3-1 10:06
彭国伦书上有一个程序可以给文件的每一行添加行号,可供你参考,程序如下:
pro ...

您好,其实我想的是用地址来考虑这个问题,将地址赋以不一样的名称,再用call进行调用

hpa 发表于 2020-3-1 11:27:47

li913 发表于 2020-3-1 11:08
如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号 ...

您好,我这里对数据进行编号是为了确定数据的位置,主要防止数据中断,然后就可以计算日变温

hpa 发表于 2020-3-1 11:28:18

li913 发表于 2020-3-1 11:08
如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号 ...

您好,我这里对数据进行编号是为了确定数据的位置,主要防止数据中断,然后就可以计算日变温

vvt 发表于 2020-3-1 14:09:47

楼主的逻辑非常混乱。
什么调用数据??一般只有(可执行的)函数或者程序才能称为调用,数据只能叫使用或者取值。

楼主要编号的东西,到底是内存中的二维数组,还是存储有二维数据结构的文件?

“将地址赋以不一样的名称”,这句话更是听不明白。

necrohan 发表于 2020-3-2 23:17:45

如果1954年1月1日=1,那还不如找个日期函数,每增加一天就对应下一行,想找某天的数据用日期函数找到对应行。我理解楼主是这个意思。

hpa 发表于 2020-3-5 15:47:25

vvt 发表于 2020-3-1 14:09
楼主的逻辑非常混乱。
什么调用数据??一般只有(可执行的)函数或者程序才能称为调用,数据只能叫使用或 ...

不好意思,前辈,是我表述的的不够清楚,实际上我是需要一个函数,这个函数,比方说1954年1月1号,那么它就是1,然后这时候你就可以把他这个数组就直接变成这个1。然后,然后1954年1月2号是2,那么这个给他变成这个2。那1954年2月1号就应该是32了,那么这个32呢,就是32这个值,那么就是call那个天数,就可以直接得到相应的数据。

hpa 发表于 2020-3-5 15:48:24

necrohan 发表于 2020-3-2 23:17
如果1954年1月1日=1,那还不如找个日期函数,每增加一天就对应下一行,想找某天的数据用日期函数找到对应行 ...

您好,我就是这个意思,只不过我的数据跨度很大,要从1954年到2007年
页: [1] 2
查看完整版本: 求助思路(Fortran函数)