24小时热门版块排行榜    

查看: 3100  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

david830wu

新虫 (初入文坛)

[求助] Fortran的格式化输入输出问题

下面是一个矩阵的内容,在文件里,想用Fortran读入,应该怎样做呢?
难点在于,空格数不固定,数字的长度也不固定,Fortran有没有能像C++那样的自动跳过空格,自动控制长度的智能读入呢?

Matrix.dat:
1 2  3   45 2
341 3 221 2 45
21     45     3 23 3
1           32 2     34 33
45  36   39    81 4

谢谢啦!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

david830wu

新虫 (初入文坛)

xzhdty: 欢迎常来 2011-07-20 07:41:43
引用回帖:
Originally posted by snoopyzhao at 2011-07-19 08:49:58:
能说得更简单一些吗?抛开所谓的专业,呵呵……
也就是说,我的输入是什么,我的输出是什么?

输入文件:
(0 "Faces:" )
(13(0 1 28 0))
(13(3 1 28  3 0)(
3 7  3  5 0 0      
3 2  3  7 0 0  
3 2  8  1 0 0
3 7  8  2 0 0
3 7  6  8 0 0
3 5  6  1d 0 0
... (一共28H行 = 40行)
))
输出数据:
integer :: N = 28H = 40
integer, dimension(N,3) :: node_list
其中 node_list =
7, 3, 5;
2, 3, 7;
2, 8, 1;
7, 8, 2;
7, 6, 8;
5, 6, 29;
... (一共四十行)

不知道我这回说清楚了吗?
9楼2011-07-19 22:11:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
david830wu(金币+5): 嗯,以前陷到格式化输出的沟里了,其实用“*”就好了。非常感谢! 2011-07-17 17:24:03
xzhdty(金币+2): 欢迎常来 2011-07-17 21:51:22
你每行都是一样多的数字吗?或者说,你的 matrix 的维数是已知的吗?

直接
CODE:
read(12, *) ((a(i,j), i=1,5),j=1,5)

不行吗?

当然,这里都是以浮点数读入的,你可以转一下,呵呵……
2楼2011-07-17 17:13:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

david830wu

新虫 (初入文坛)

★ ★
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-17 22:51:32
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-17 22:52:42
再进一步问一下,也是我真实遇到的,就是GAMBIT的网格划分文件,数据文件是十六进制应该怎么办呢?
MATRIX.dat
1   3f  a6    21   4
a cc        f3      2  2
3    d0    b2    46   4
……
这样的文件用“*”好像就不行了,如果后面加option:Zn[.m]的话就得指定宽度,这应该怎么处理?
3楼2011-07-17 18:45:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-17 22:51:45
引用回帖:
Originally posted by david830wu at 2011-07-17 18:45:35:
再进一步问一下,也是我真实遇到的,就是GAMBIT的网格划分文件,数据文件是十六进制应该怎么办呢?
MATRIX.dat
1   3f  a6    21   4
a cc        f3      2  2
3    d0    b2    46   4
……
这样的文件用 ...

这个没有啥好办法,将多个空格替换为一个空格,然后按字符串读入,以空格划分,再以内部文件的方式格式化读入……
4楼2011-07-17 19:44:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见