爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7509|回复: 9

[求助] fortran读取文本数据的问题

[复制链接]

新浪微博达人勋

发表于 2011-12-12 13:24:53 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我的需要读取的资料是,有5列的数据,这个数据是fortran默认输出的格式,然而我想要把这数据读成 ((t(i,j),j=1,30),i=,20)
的形式 。
open(100,file=trim(filename),form='formatted',status='old',iostat
     $ =error)
        if(error/=0)then
write(*,*)"open trim(filename) fail."
stop
endif
                read(100,101)((t(i,j,1),i=1,ix),j=1,iy)
101       format(5e12.5)
  print*,t(i,j,1)
    read(100,101)((u(i,j,1),i=1,ix),j=1,iy)
但是好像读入过程有错误
然后我把格式输入 101       format(5e12.5),这一行注释掉,把
把read(100,101)((t(i,j,1),i=1,ix),j=1,iy)中101改成
      read(100,×)((t(i,j,1),i=1,ix),j=1,iy)
好像是读入数组超出了范围,出错。这个问题该怎么解决
求助!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-12 13:31:11 | 显示全部楼层
这种有5列的数据,是有格式数据,你得按照有格式来读取,隐式循环读写法适用于无格式读写和二进制读写。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-12 14:14:10 | 显示全部楼层
你可以先读进数组  然后用一个中间数组进行格式转换一下就好
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-12 15:18:07 | 显示全部楼层
你这是什么数组。。。一下子两维,一下子三维的。。。。数据也没给出。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-12 22:57:12 | 显示全部楼层

用中间数组该格式 ,能不能给我举个简单的列子啊,我以前也试过但是没成功
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2011-12-13 09:24:55 | 显示全部楼层
由于你没有给出数据的行数,我只是简单的推断你的数据一共是120*5(源)=20*30(需求)=600个,写了这样一个简单的读取方式,用简单的数学变换读取就能够满足你的要求,具体的你先看明白什么意思,然后根据你的实际情况调整
do i=1,120
read(1,*) (x(int((i-1)/6)+1,(i-1)*5+j),j=1,5)
enddo

点评

图很漂亮: 5.0
图很漂亮: 5
  发表于 2011-12-13 19:00

评分

参与人数 1金钱 +10 贡献 +2 收起 理由
云大小子 + 10 + 2 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-7 23:22:02 | 显示全部楼层
言深深 发表于 2011-12-13 09:24
由于你没有给出数据的行数,我只是简单的推断你的数据一共是120*5(源)=20*30(需求)=600个,写了这样一个 ...

深深版主,我的问题是我有10001行,5列的txt数据,第一行数据是数据的说明:
区站号,年,月,日,20-20时降水量
50353,1954,1,1,31002
50353,1954,1,2,32700
50353,1954,1,3,0
50353,1954,1,4,32700
50353,1954,1,5,32700
50353,1954,1,6,32700
50353,1954,1,7,32700
50353,1954,1,8,31005
50353,1954,1,9,0
50353,1954,1,10,0
50353,1954,1,11,32700
50353,1954,1,12,32700
50353,1954,1,13,32700
50353,1954,1,14,32700
50353,1954,1,15,31004
……………………
我应该如何把每一列数据读取成一个变量呢?
用数组的方法如何读取?用单独的变量读取每一列应该如何呢?
我试了半天也没弄清楚。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-3-8 18:06:56 | 显示全部楼层
kongfeng0824 发表于 2013-3-7 23:22
深深版主,我的问题是我有10001行,5列的txt数据,第一行数据是数据的说明:
区站号,年,月,日,20-20时降 ...

这样你说明一下就简单多了,用下面的这个应该就ok:
parameter(m=10001) !当然,将10001定义为一个字符常量的目的就在于省事儿···
open(1,file="")
read(1,*) !此处的谜底在于跳过首行不读取
do i=1,m  
read(1,*) (x(i,j),j=1,5)   !此处的5也可以用字符常量表征
enddo
close(1)

自此,数据被read到一个二维数组里面,x(m,5)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-8 22:41:47 | 显示全部楼层
言深深 发表于 2013-3-8 18:06
这样你说明一下就简单多了,用下面的这个应该就ok:
parameter(m=10001) !当然,将10001定义为一个字符常 ...

嗯已经解决。多谢深深版主。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-3-9 09:19:00 | 显示全部楼层
kongfeng0824 发表于 2013-3-8 22:41
嗯已经解决。多谢深深版主。

不客气··
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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