Fortran Coder

查看: 14037|回复: 11

[通用算法] 求助思路(Fortran函数)

[复制链接]

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
发表于 2020-3-1 09:56:59 | 显示全部楼层 |阅读模式
使用函数,给一个10000行15列的数组的每一行进行编号(该数组是从上到下按时间顺序排列的,第一行为1954年1月1日,编号应编为1,第三十二行为1953年2月1日,编号应编为32,以此类推,需要编到2007年),在调用时直接使用call就可以调用该行数据,求思路。

2

帖子

0

主题

0

精华

新人

F 币
17 元
贡献
7 点
发表于 2020-3-1 10:06:06 | 显示全部楼层
彭国伦书上有一个程序可以给文件的每一行添加行号,可供你参考,程序如下:
[Fortran] 纯文本查看 复制代码
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

796

帖子

2

主题

0

精华

大宗师

F 币
3787 元
贡献
2266 点
发表于 2020-3-1 11:08:02 | 显示全部楼层
如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号一起复制,粘贴到其他位置。

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
 楼主| 发表于 2020-3-1 11:08:20 | 显示全部楼层
Qilin 发表于 2020-3-1 10:06
彭国伦书上有一个程序可以给文件的每一行添加行号,可供你参考,程序如下:
[mw_shl_code=fortran,true]pro ...

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

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
 楼主| 发表于 2020-3-1 11:27:47 | 显示全部楼层
li913 发表于 2020-3-1 11:08
如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号 ...

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

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
 楼主| 发表于 2020-3-1 11:28:18 | 显示全部楼层
li913 发表于 2020-3-1 11:08
如果是为了练习fortran,没问题。实际应用中,这个功能没意义,很多编辑器都可以显示行号,也可以连同行号 ...

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

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

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

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

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

发表于 2020-3-2 23:17:45 | 显示全部楼层
如果1954年1月1日=1,那还不如找个日期函数,每增加一天就对应下一行,想找某天的数据用日期函数找到对应行。我理解楼主是这个意思。

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
 楼主| 发表于 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那个天数,就可以直接得到相应的数据。

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
 楼主| 发表于 2020-3-5 15:48:24 | 显示全部楼层
necrohan 发表于 2020-3-2 23:17
如果1954年1月1日=1,那还不如找个日期函数,每增加一天就对应下一行,想找某天的数据用日期函数找到对应行 ...

您好,我就是这个意思,只不过我的数据跨度很大,要从1954年到2007年
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-19 02:00

Powered by Tencent X3.4

© 2013-2024 Tencent

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