爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 31251|回复: 37

[求助] 【求助】fortran读取文件列数问题

[复制链接]

新浪微博达人勋

发表于 2011-7-16 20:45:30 | 显示全部楼层 |阅读模式

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

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

x
最近在处理一大批数据,都是数组形势的,太多了,手动处理肯定是不行了,只能编程解决

依次打开几百个文件,行数不同,这个已经解决了

运行过程中,发现列数也不同,有的文件是28列,有的是24列,分布不规律

有没有什么办法,像自动读取文件行数那样,读取出列数呢? 有劳各位啦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-7-17 11:23:23 | 显示全部楼层

回帖奖励 +1 金钱

    昨晚想了一下,自己测试效果还不错

    由于fortran对字符串处理的功能比较弱,没有字符串分割等函数,在本程序中需要给出的有分割字符以及文件名,返回的就是文件的列数

功能及使用范围:
1、多个文件,每个文件列数不一样,从中读出列数
2、列数按文件的第一行的列数为准,同一个文件的列数需要相同(要不然你就需要自己修改程序来读取一个列数最大的行作为列数了)
3、可以稍微修改一下程序子程序方便调用

程序贴出来如下:
(分割字符请自行查找ASCII码表,附件也带上一份)

program main
character char_now,char_pre,char_split
char_split=char(32)
char_pre=char_split
open(1,file='test.txt',status='old')
i=0
do while(1)
    read(1,'(a1)',end=10,advance='no')char_now
     if(char_now==char_split)then
          char_pre=char_now
          cycle
     endif
     if(char_pre==char_split)then
          i=i+1
     endif
     char_pre=char_now
enddo
10 print*,i
end

程序在此下载:
read.f90 (689 Bytes, 下载次数: 135)

评分

参与人数 1威望 +1 金钱 +8 贡献 +3 收起 理由
topmad + 1 + 8 + 3 献给万能的清风

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2011-7-17 12:27:05 | 显示全部楼层
哪里有困难,哪里就有清风

论坛有清风是大家的福啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-7-17 13:33:52 | 显示全部楼层
topmad ,想问个问题:批处理几百个文件,不规则的列数和行数,你的变量是怎么设置的啊?是用动态的吗?:)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-7-17 13:44:28 | 显示全部楼层

是的 设置一个动态的二维数组

我不知道你所谓的不规则是文件之间的不规则还是同个文件之内,列数不规则
我现在用到的是一个文件里面,列数规则,不同的文件,列数不规律
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-7-17 14:16:02 | 显示全部楼层
topmad 发表于 2011-7-17 13:44
是的 设置一个动态的二维数组

我不知道你所谓的不规则是文件之间的不规则还是同个文件之内,列数不规则 ...

我的意思是既然有几百个文件,文件文件与文件格式不太一样,你的变量怎么设置啊?还是你是一个文件一个文件的处理啊?如果是一个一个的处理的话我懂。 呵呵,我估计想的跟你不一样,也不知道你处理数据的目的,只是突然想到怎么用1~2个循环就可以处理成批的数据。。可能我的想法本身有问题,叨扰了。(不过以前处理过台风的数据,倒是可以的)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-7-17 15:08:34 | 显示全部楼层
残月 发表于 2011-7-17 14:16
我的意思是既然有几百个文件,文件文件与文件格式不太一样,你的变量怎么设置啊?还是你是一个文件一个文 ...


我手头有许多文件,名称是这样的20000101一直到20100101,每个文件里面是一些站点的观测资料,都是这样的命名格式,我需要从这些文件中,提取出来我需要的某个区域的台站资料,因为00年到10年,观测项目增多,所以,中间有些资料由原来的24列变到了28列,后来,不知道为啥,有的,又变成了24列,但是,每一个文件内部每行的列数是一样的,不知道我说清楚了没

ps,刚刚试了一下清风的那个小程序,可以较好的完成,正在运行

运行结束补充,见图
QQ截图20110717153835.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-7-17 15:43:17 | 显示全部楼层
mofangbao 发表于 2011-7-17 11:23
昨晚想了一下,自己测试效果还不错

    由于fortran对字符串处理的功能比较弱,没有字符串分割等函数 ...

清风,我测试了一下,又这样的一个问题

打开一个文件,先用http://bbs.06climate.com/forum.p ... &extra=page%3D1描述的方法进行了行数统计,为了高效,我没有关闭文件,直接进行列数统计,然后关闭文件,如果这样,我这里显示的列数是0

如果统计列数结束后,关闭文件,再打开,列数结果正常
没有彻底搞清楚,求解释
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-7-17 16:02:48 | 显示全部楼层
topmad 发表于 2011-7-17 15:43
清风,我测试了一下,又这样的一个问题

打开一个文件,先用http://bbs.06climate.com/forum.php?mod=v ...

打开一个文件读取后当然要关闭重新打开。要不然文件指针在文件结尾,读出来的列数必然是0
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-7-17 16:05:07 | 显示全部楼层
残月 发表于 2011-7-17 14:16
我的意思是既然有几百个文件,文件文件与文件格式不太一样,你的变量怎么设置啊?还是你是一个文件一个文 ...


用一个循环控制打开的文件,文件名为动态生成,所以文件名必须有规律,如果文件名没有规律就要事先把文件名存在一个文本文件中,然后读到变量里面。打开某个文件后如有需要则先判断行数和列数,给数组动态申请内存,接下来就是数据的处理了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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