爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7125|回复: 12

[求助] fortan读txt文件怎么跳过某些注释行

[复制链接]

新浪微博达人勋

发表于 2013-5-31 15:02:10 | 显示全部楼层 |阅读模式

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

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

x
fortran读txt文件怎么跳过某些注释行?
注释放在数据后面不会读错,若将一单行作为注释会出错,不知该怎么修改可以让一单行作为注释?
可正确读取的如下:
2  3  4 ;parameter1,2,3

读取会出错的如下:
;parameter1,2,3
2  3  4

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

新浪微博达人勋

发表于 2013-5-31 15:07:39 | 显示全部楼层
你的资料是个什么结构的啊,用下自办打开看看怎么排列的。截个图上来吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-31 15:10:34 | 显示全部楼层

谢谢。“自办打开”指的是?
输入文件内部分数据如下:
3 ; 1:AIEM, 2=QP, 3=Wegmuller
1 ; 1:single layer model, 2:multilayer model
1 ; 1:Hallikainen et,al.(1987), 2:Roy et,al.(2004)

;sky parameter
8,13,45 ;sky downward radiation v
7,12,52 ;sky downward radiation h
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-5-31 16:17:13 | 显示全部楼层
哈···你对fortran的read还不了解
fortran里面分为字符型,实型和整型,你那个字符就应该用一个字符型的调过,然后读取整型或者实型就可以了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-31 16:19:50 | 显示全部楼层
用if语句,读到分号的话跳读下一行,不是分号就正常读。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-31 16:25:03 | 显示全部楼层
言深深 发表于 2013-5-31 16:17
哈···你对fortran的read还不了解
fortran里面分为字符型,实型和整型,你那个字符就应该用一个字符型的 ...

谢谢。刚想了把分号;改为/可以跳过/后的一行内容。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-31 20:45:15 | 显示全部楼层
这个可以通过跳过读取空行来设置
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-31 22:00:10 | 显示全部楼层
本帖最后由 chengjiuq 于 2013-5-31 22:05 编辑

谢谢liutaoz21 和kongfeng0824 ,我基础不是很好,现把代码贴上,能在这基础上修改代码来描述你们所说的方法吗?
下面是按照言深深 的方法把那两行用字符串代替,来实现跳过该两行的目的(有些小错误,comment1,comment2
都表示; )。        
program s2
        integer typ,typm,typke
    character*100 comment1,comment2
    double precision tsky_v(3),tsky_h(3)
        open(unit=1,file="s.txt",status='old')!11-13-1300.txt
!   add three line below on 2013.5.31        
        read(1,*) typ ! name of soil emission model,1:AIEM, 2=QP, 3=Wegmuller
        read(1,*) typm ! single or multilayer model,seperately 1 and 2
        read(1,*) typke ! extinction model,1:Hallikainen et,al.(1987), 2:Roy et,al.(2004)
        read(1,*) comment1
        read(1,*) comment2
        read(1,*) (tsky_v(i),i=1,3)
    read(1,*) (tsky_h(i),i=1,3)

        write(*,*) typ
        write(*,*) typm
        write(*,*) typke
        write(*,*) comment1
    write(*,*) comment2
    write(*,*) tsky_v
        write(*,*) tsky_h
        end

以下是s.txt文档的内容。
3 ; 1:AIEM, 2=QP, 3=Wegmuller
1 ; 1:single layer model, 2:multilayer model
1 ; 1:Hallikainen et,al.(1987), 2:Roy et,al.(2004)

; parameter
; sky parameter
8,13,45 ;sky downward radiation v
7,12,52 ;sky downward radiation h
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-6-1 08:16:18 | 显示全部楼层
chengjiuq 发表于 2013-5-31 22:00
谢谢liutaoz21 和kongfeng0824 ,我基础不是很好,现把代码贴上,能在这基础上修改代码来描述你们所说的方法 ...

程序是没有问题的
program s2
        integer typ,typm,typke
        character*10 comment1,comment2
        double precision tsky_v(3),tsky_h(3)
        open(unit=1,file="s.txt",status='old')!11-13-1300.txt
!   add three line below on 2013.5.31        
        read(1,*) typ ! name of soil emission model,1:AIEM, 2=QP, 3=Wegmuller
        read(1,*) typm ! single or multilayer model,seperately 1 and 2
        read(1,*) typke ! extinction model,1:Hallikainen et,al.(1987), 2:Roy et,al.(2004)
        read(1,*) comment1
        read(1,*) comment2
        read(1,*) (tsky_v(i),i=1,3)
        read(1,*) (tsky_h(i),i=1,3)

        write(*,*) typ
        write(*,*) typm
        write(*,*) typke
        write(*,*) comment1
        write(*,*) comment2
        write(*,*) (tsky_v(i),i=1,3)
        write(*,*) (tsky_h(i),i=1,3)
end

完全可以将你需要的数据read出来,你说的出现问题是不是comment的两个出现空行??这是因为你此前的comment长度设置了100,表示占位100个,超过一行的数量,现在改成10就好了···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-6-1 08:18:45 | 显示全部楼层
补充输出结果

改动character*100之前:

1.png

之后

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

本版积分规则

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

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

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