回 帖 发 新 帖 刷新版面

主题:如何操作可以顺利读取一个文件中所需的数据?请指点,谢谢

大家好!有个数据文件的格式如下:

model, based on dimensionless form, b.c.           !
CSBT, fixed time step; Voss discretization            [color=008000]!首行及第二行都为字符串[/color]
    T    F    F    F                [color=008000]!第3行[/color]
    51    51    43  2601111843       [color=008000] !第4行为x,y,z方向的节点数及模型的总节点数[/color]
     0    0     0    0     0      0     0      0      0      0    0    0    [color=008000]!第5行为边界条件的数值[/color]
      0     0    0   0    0     0     0    0     0      0      0     0
        ……  …… …… …… …… …… …… …… …… …… …… …… …… …… …… …… 
        …… …… …… …… …… …… …… …… …… …… …… …… …… …… …… ……  [color=008000]!以上都为边界条件数值,与第5行相同列[/color]
       0   0    0    0    0                              [color=008000]!这行仍为边界条件数值,列数不固定,取决与边界条件的节点个数[/color]    
Initial Conditions;  Time     0.00     (s)                        [color=008000]!这行初始条件提示的字符[/color]
                Temperatures                 [color=008000]!这行为初始条件温度提示字符 [/color]           
2.8E+06  2.89E+06  2.8E+06  2.89E+06 2.89E+06  2.89E+06  2.89E+06  2.89E+06  2.89E+06    [color=008000]!这行为初始条件值[/color]
……  …… …… …… …… …… …… …… …… …… …… …… …… …… 
……  …… …… …… …… …… …… …… …… …… …… …… …… ……             [color=008000]!以上都为初始条件值[/color]
Time Step No.     5 Time  4.32000E+05 (s)                              [color=008000]!这行第5个时间步长的提示字符[/color]
                                     Temperatures             [color=008000] !这行为第5个时间步长温度提示字符[/color]   
2.8E+06  2.89E+06  2.8E+06  2.89E+06 2.89E+06  2.89E+06  2.89E+06  2.89E+06  2.89E+06      [color=008000]!这行开始是所需的数据[/color]
2.8E+06  2.89E+06  2.8E+06  2.89E+06 2.89E+06  2.89E+06  2.89E+06  2.89E+06  2.89E+06 
……  …… …… …… …… …… …… …… …… …… …… …… …… …… …… …… ………
……  …… …… …… …… …… …… …… …… …… …… …… …… …… …… …… ………[color=008000]!以上都为第5个时间步长的温度数值,[/color]

我看了彭国伦的《Fortran 95程序设计》和谭浩强的《Fortran语言程序设计》,上面好像都没有提到如何读取这种文件。
请问一下,读取这种文件应该怎么办?请指导一下,谢谢!
我原先是想用某函数查找字符“Time Step No.”,如果找到,就开始读取数据,可是我翻了以上两本fortran书,似乎都没有提到这种函数。
请问一下,应该怎么做能顺利读取所需的数据?谢谢!

回复列表 (共17个回复)

11 楼

[quote]我重新上传了附件,里面有文件格式说明。[/quote]

遇到Temperatures 就结束吗?不同Time Step No.的数据放一个文件还是不同文件?

12 楼

我想要的数据就是Temperatures 的数据,不同Time Step No.的数据放在不同文件里。
您不用帮我写代码的,不然我真的很不好意思的,已经够麻烦您了。
请您指导我一下,应该怎么做,该采用什么思路。应该怎么忽略不想要的数据,得到想要的数据?
谢谢您!

13 楼

[quote]我想要的数据就是Temperatures 的数据,不同Time Step No.的数据放在不同文件里。
您不用帮我写代码的,不然我真的很不好意思的,已经够麻烦您了。
请您指导我一下,应该怎么做,该采用什么思路。应该怎么忽略不想要的数据,得到想要的数据?
谢谢您![/quote]

提供一个思路:用INDEX函数,当INDEX(astr,bstr)/=0 表示字符串astr里面有bstr子字符串。[em2]

14 楼

嗯,我昨天也想用这个函数。但是前面那些无用的数据,应该怎么忽略呢?能否把前面无用的数据都当成一个字符串来读取?

15 楼

[quote]嗯,我昨天也想用这个函数。但是前面那些无用的数据,应该怎么忽略呢?能否把前面无用的数据都当成一个字符串来读取?[/quote]

astr就是读回的每行的字符串啊!参考http://bbs.pfan.cn/post-348188.html。

16 楼

惭愧惭愧,在发帖的时候,我看了那个帖子一会儿,可是没有看进去。当时感觉那个帖子应该对自己有帮助,只是在上班的时候没有耐心看完,现在把这两个帖子下载了,回家好好想一想。
谢谢老师帮助,谢谢!

17 楼

昨晚回去看了一下,发觉自己犯了语法方面的错误,在读取整行数据的时候,写的语句有问题。才知道“    read(1,'(a)',iostat=error)   astr”是读取整行数据的正确写法。'(a)'是将整行数据作为一个字符串的用法。

我对fortran读取文件的一些用法还是不了解,不知道有哪本书对这方面有详细的介绍,有人知道的话,请推荐一下,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册