24小时热门版块排行榜    

CyRhmU.jpeg
查看: 934  |  回复: 11
当前主题已经存档。

shadow6wy

铜虫 (初入文坛)

[交流] 【求助】求fortran达人解答fortran读取数据问题

我想用fortran实现我以下的要求
比如说有数据文件data.txt
文件如这样格式
1.1 1.2  1.3  1.4
2.1 2.2  2.3  2.4
3.1 3.2  3.3  3.4
(数据格式整齐)

我想依次读取1.1  1.2  1.3  1.4  2.1  2.2  2.3  2.4  3.1  3.2  3.3  3.4
但每次只要读一个,因为在读取一个数据后还有一个巨大的循环体进行运算
因此简单的说可以表达为
读取1.1赋予a——运行循环体——读取1.2再赋予a——运行循环体……直到所有数据都读完。

另外,我也不希望用数组的方式一次性把数据都读出来,因为这里是一行4个数据,我的运算中可能有1000个或者一万个数据,这样占用内存可能引起溢出。因此想求一个好一点的方法!
谢谢

急求!!!若有人肯帮忙写出程序,愿再出20金币悬赏

[ Last edited by jjdg on 2010-1-21 at 16:27 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shadow6wy

铜虫 (初入文坛)


jjdg(金币+1,VIP+0):鼓励新虫交流! 1-21 16:24
顶起来啊,怎么连个回复的都没有啊?如果嫌少 我再加金币啊
2楼2010-01-21 13:42:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

★ ★ ★ ★ ★ ★
余泽成(金币+1,VIP+0):谢谢参与应助! 1-21 14:45
shadow6wy(金币+5,VIP+0):我尝试一下 1-22 09:20
一次读一行4个数据吧,循环运算完了以后,再读下面4个数据......
3楼2010-01-21 14:25:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjdg

版主 (知名作家)

优秀版主

★ ★ ★ ★ ★
shadow6wy(金币+5,VIP+0):理解了 1-22 09:19
即用即读吧!
努力学习!以正当途径!获得需要的知识!
4楼2010-01-21 16:28:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shadow6wy

铜虫 (初入文坛)

引用回帖:
Originally posted by nono2009 at 2010-1-21 14:25:
一次读一行4个数据吧,循环运算完了以后,再读下面4个数据......

这里只是个例子,我的数据估计有1000个或者10000个,还有许多个文件都要读,所以不能都读到内存里吧,在read一次之后就没有办法再读上一行的文件了吗?
5楼2010-01-21 17:05:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shadow6wy

铜虫 (初入文坛)

引用回帖:
Originally posted by jjdg at 2010-1-21 16:28:
即用即读吧!

版主是什么意思呢?
6楼2010-01-21 17:06:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

1W个双精度的才占多少空间啊,你自己算算吧1W*8字节。你自己用动态数组,自己分配空间就是了。
读数据用real(id,*)  A,B,C,D 用默认格式就行了。不用去指定格式,一次是读一行。
引用回帖:
Originally posted by shadow6wy at 2010-1-20 17:31:
我想用fortran实现我以下的要求
比如说有数据文件data.txt
文件如这样格式
1.1 1.2  1.3  1.4
2.1 2.2  2.3  2.4
3.1 3.2  3.3  3.4
(数据格式整齐)

我想依次读取1.1  1.2  1.3  1.4  2.1  2.2  2.3  2. ...

7楼2010-01-21 18:46:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★
余泽成(金币+2,VIP+0):谢谢专家,辛苦了! 1-21 18:59
自己看一下rewind的用法吧
引用回帖:
Originally posted by shadow6wy at 2010-1-21 17:05:

这里只是个例子,我的数据估计有1000个或者10000个,还有许多个文件都要读,所以不能都读到内存里吧,在read一次之后就没有办法再读上一行的文件了吗?

8楼2010-01-21 18:48:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liyi3344520

木虫 (正式写手)

★ ★
jjdg(金币+2,VIP+0):辛苦了 1-22 00:32
POSITION=’ASIS’ or ‘REWIND’ or ‘APPEND’   设置文件打开时候的读写位置:
POSITION=’ASIS’   表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。是默认值。
POSITION=’REWIND’      表示文件打开时的读取位置移到文件的开头。
POSITION=’APPEND’     表示文件打开时的读取位置移到文件的结尾。
9楼2010-01-21 19:08:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hakekill

木虫 (小有名气)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+3,VIP+0):谢谢应助,辛苦了! 1-22 11:33
我写了一个,不过对数据文件的格式要求比较严,不过数据格式可以根据具体的情况来做修改,贴出来请大家指正一下:

program main
integer :: cur_num, num_eachline
open(unit = 10, file = "test.dat", action = "read"
num_eachline = 4
cur_num = 1
do
  if ( cur_num == num_eachline ) then
    read(unit = 10, fmt = "(f3.1)", advance = "yes", iostat = ios ) a
  else
    read(unit = 10, fmt = "(f3.1, 1x)", advance = "no", iostat = ios ) a
  end if
  if (ios < 0 ) then
    close( 10 )
    exit
  else
    print *, a
    if ( cur_num < num_eachline ) then
      cur_num = cur_num + 1
    else
      cur_num = 1
    end if
  end if
end do
end program

--test.dat----
1.1 1.2 1.3 1.4
2.1 2.2 2.3 2.4
3.1 3.2 3.3 3.4
4.1 4.2 4.3 4.4

result:
1.1
1.2
1.3
1.4
2.1
2.2
2.3
2.4
3.1
3.2
3.3
3.4
4.1
4.2
4.3
4.4
10楼2010-01-22 10:36:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 shadow6wy 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见