主题:求教fortran不同行数多文件的读取
GuiltyOne
[专家分:60] 发布于 2011-10-13 17:27:00
现在假设我有n个数据文件需要一起读取以便一起操作,每个文件的行数都不相同,要求将每个文件里面的数据全部读写出来,请问应该如何操作?
回复列表 (共7个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2011-10-14 09:06:00
首先写个函数,获得文件的行数。
然后再循环。
[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]
板凳
cgl_lgs [专家分:21040] 发布于 2011-10-14 10:23:00
嘿嘿,建议还是尽量不要再用End和Err标签啦:)这个是将被放弃的标准,在GCC里支持就很不好了:)
3 楼
yeg001 [专家分:14390] 发布于 2011-10-14 10:31:00
雪球的代码怎么可以排版了? 是弄好了再帖上来的?
4 楼
GuiltyOne [专家分:60] 发布于 2011-10-14 12:01:00
在下使用fortran的时间不长,弱弱的问一下cgl_lgs兄台Err标签是什么。。还有GCC又是什么。。End和Err标签为什么将要被放弃呢?
5 楼
yeg001 [专家分:14390] 发布于 2011-10-14 13:56:00
cgl_lgs兄不在的话, 我代为简单回答一下, 回答得不完整请补充:
End和Err 相当于是read函数下的参数. 那些是老fortran标准的东西了, 功能类似于goto, 所以新标准基用其他参数取代了.
gcc 是gnu下的项目,集合了常用的编译器.不过主要是面对linux的.
6 楼
臭石头雪球 [专家分:23030] 发布于 2011-10-14 14:11:00
这是一个老代码,一直在用,所以也没改。
可以用 iostat 代替。
7 楼
GuiltyOne [专家分:60] 发布于 2011-10-14 16:59:00
还要继续麻烦一下雪球哥哈,这段代码里还有很多地方颇为不明白,比如为什么要用到逻辑变量bIsSunRiseFromEast,它在下面的循环里起到什么作用;GetFileN的初值为啥要设为0;还有,行数的读取究竟是怎么样完成的。。。
我来回复