爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 34667|回复: 42

[求助] fortran读取秒探空资料

[复制链接]

新浪微博达人勋

发表于 2016-12-30 10:27:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xyyl 于 2016-12-30 10:27 编辑

目的:利用fortran将秒探空资料数据读取成功并处理后,写入固定格式的文件,水平不够,程序遇到几个问题不知道如何处理,希望了解的小伙伴们帮忙!源文件如图            

图1 秒探空源数据

图1 秒探空源数据


要求的文件输出格式

图2

图2


遇到的问题如下:
1)原始数据中含有///类型的缺测值,要先把它剔除掉,但是在读取时,以多个字符串的形式读入,碰到///会读不进去,输出时,凡是出现缺测值的行,都会输成空行,但是像源文件中第二行,尽管左边出现缺测,但右边有些数据还是可以用的,这样就会导致数据会漏掉许多,想问下,怎么样才能将///的字符读进去呢?

2)以字符串的形式读入输出后,还需要利用其中的数据进行计算,所以需要将字符串转换成浮点型和整型,怎么转换呢,写了这样的语句,提示没有错误,但运行时就会显示转换错误,该怎么正确转换成浮点型和整型呢?
3.png 4.png

3)文件输出格式的第一行,有单双引号要输出,但里面有个’to’字符串,程序写成这样,会自动识别出来,下面的语句也无法正常运行,怎么处理呢,引号感觉用的太多了
5.png

诚心写的提问帖,希望懂的朋友们帮帮忙,非常感谢!!!


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

新浪微博达人勋

发表于 2016-12-30 11:01:33 | 显示全部楼层
1.先对字符串里的///进行替换,换成数值型的缺省值如-99
2.程序不全,看不出啥问题,估计是声明的变量有错误
3.变成蓝色应该不影响,不明白什么叫做“下面的语句也无法正常运行”

请尽量在提问时给全必要的信息,程序最好给全且不要以图片形式给出。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-30 12:58:00 | 显示全部楼层
可以全部先用字元去讀取,後將///判斷出來,數字可以用文字轉換,像下面那種轉法即可。

     program AAA
     character AA*5,CC*3
     
     AA="1.523"
     CC="111"
     READ(AA,"(f5.3)")BB
     READ(CC,"(I3)")IB
     
      end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-30 17:07:09 | 显示全部楼层
lone0212 发表于 2016-12-30 12:58
可以全部先用字元去讀取,後將///判斷出來,數字可以用文字轉換,像下面那種轉法即可。

     program AA ...

把一行整个看成一个字符串,能读出来,但是到了回车就读不出后面的行了,怎么办,能设成数组么,有很多行
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-30 17:12:24 | 显示全部楼层
lqouc 发表于 2016-12-30 11:01
1.先对字符串里的///进行替换,换成数值型的缺省值如-99
2.程序不全,看不出啥问题,估计是声明的变量有错 ...

怎么样能把所有的字符读进来呢,目前只能读出第一行,到回车就识别不了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-30 18:50:42 | 显示全部楼层
xyyl 发表于 2016-12-30 17:12
怎么样能把所有的字符读进来呢,目前只能读出第一行,到回车就识别不了

用fortran比较费劲,python应该更适合做这种事。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-30 21:03:20 | 显示全部楼层
如果你一次讀整行,那你一開始宣告,character 時就要 AA*100 宣告長一點,但這樣抓下來以後還在再去切
character*180 AA(N)

或是用許多參數去讀
character AA(N)*5,BB(N)*4....

do i=1,100000
read(20,*,end=999) AA(i),BB(i).....
NN=i
enddo
999 close(20)
抓到每一組以後,再轉成數字。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2016-12-30 21:20:32 | 显示全部楼层
lone0212 发表于 2016-12-30 12:58
可以全部先用字元去讀取,後將///判斷出來,數字可以用文字轉換,像下面那種轉法即可。

     program AA ...

同意板凳,先全部按字符串直接格式化读入,再判断和转化即可~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-3 09:03:07 | 显示全部楼层
兰溪之水 发表于 2016-12-30 21:20
同意板凳,先全部按字符串直接格式化读入,再判断和转化即可~

全部按字符串,是指所有行的所有数据都读成一个字符串么,到了第一行回车那里,后面的数据就读不出了呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-3 10:01:54 | 显示全部楼层
lone0212 发表于 2016-12-30 21:03
如果你一次讀整行,那你一開始宣告,character 時就要 AA*100 宣告長一點,但這樣抓下來以後還在再去切
ch ...

每行分成多个字符串读取的话,一遇到/就读不进去了呢
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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