回 帖 发 新 帖 刷新版面

主题:求教fortran不同行数多文件的读取

现在假设我有n个数据文件需要一起读取以便一起操作,每个文件的行数都不相同,要求将每个文件里面的数据全部读写出来,请问应该如何操作?

回复列表 (共7个回复)

沙发

首先写个函数,获得文件的行数。

然后再循环。

[quote][font=宋体][color=#000000]  [/color][color=#FF0000]Integer Function [/color][color=#000000]GetFileN[/color][color=#000080]( [/color][color=#000000]iFileUnit [/color][color=#000080])
    [/color][color=#FF0000]Implicit None
    Logical [/color][color=#000080], [/color][color=#FF0000]Parameter [/color][color=#000080]:: [/color][color=#000000]bIsSunRiseFromEast [/color][color=#000080]= [/color][color=#808080].True.
    [/color][color=#FF0000]Integer [/color][color=#000080], [/color][color=#FF0000]Intent[/color][color=#000080]( [/color][color=#FF0000]IN [/color][color=#000080]) :: [/color][color=#000000]iFileUnit
    [/color][color=#FF0000]Character[/color][color=#000080]*([/color][color=#800080]1[/color][color=#000080]) :: [/color][color=#000000]cDummy
    GetFileN [/color][color=#000080]= [/color][color=#800080]0
    [/color][color=#FF0000]Rewind[/color][color=#000080]( [/color][color=#000000]iFileUnit [/color][color=#000080])
    [/color][color=#FF0000]Do While [/color][color=#000080]( [/color][color=#000000]bIsSunRiseFromEast [/color][color=#000080])
      [/color][color=#FF0000]Read[/color][color=#000080]( [/color][color=#000000]iFileUnit [/color][color=#000080], * , [/color][color=#FF0000]End [/color][color=#000080]= [/color][color=#800080]999 [/color][color=#000080], [/color][color=#FF0000]Err [/color][color=#000080]= [/color][color=#800080]999 [/color][color=#000080]) [/color][color=#000000]cDummy
      GetFileN [/color][color=#000080]= [/color][color=#000000]GetFileN [/color][color=#000080]+ [/color][color=#800080]1
    [/color][color=#FF0000]End Do
[/color][color=#000000]999 [/color][color=#FF0000]Rewind[/color][color=#000080]( [/color][color=#000000]iFileUnit [/color][color=#000080])
    [/color][color=#FF0000]Return
  End Function [/color][color=#000000]GetFileN [/color][/font][/quote]

板凳

嘿嘿,建议还是尽量不要再用End和Err标签啦:)这个是将被放弃的标准,在GCC里支持就很不好了:)

3 楼

雪球的代码怎么可以排版了? 是弄好了再帖上来的?

4 楼

在下使用fortran的时间不长,弱弱的问一下cgl_lgs兄台Err标签是什么。。还有GCC又是什么。。End和Err标签为什么将要被放弃呢?

5 楼

cgl_lgs兄不在的话, 我代为简单回答一下, 回答得不完整请补充:
End和Err 相当于是read函数下的参数. 那些是老fortran标准的东西了, 功能类似于goto, 所以新标准基用其他参数取代了.
gcc 是gnu下的项目,集合了常用的编译器.不过主要是面对linux的.

6 楼

这是一个老代码,一直在用,所以也没改。

可以用 iostat 代替。

7 楼

还要继续麻烦一下雪球哥哈,这段代码里还有很多地方颇为不明白,比如为什么要用到逻辑变量bIsSunRiseFromEast,它在下面的循环里起到什么作用;GetFileN的初值为啥要设为0;还有,行数的读取究竟是怎么样完成的。。。

我来回复

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