24小时热门版块排行榜    

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

duhb655

金虫 (著名写手)

[求助] fortran 怎么按行读取数据(有小例子) 已有3人参与

深度              温度              电导率
50.00000          28.30186          54.27303
51.00000          28.28920          54.27039               
52.00000          28.27396          54.26752                 
53.00000          28.25474          54.27453                  
54.00000          28.23691          54.28119                 
55.00000          28.23033          54.29279                  
56.00000          28.22947          54.30813                  
57.00000          28.21856          54.30784               
58.00000          28.20773          54.31368                 
59.00000          28.19656          54.32171                  
60.00000          28.15063          54.28722
我用的是网上的一个数据,我写的程序为:
CODE:
PROGRAM TE
REAL::A(11,3)
INTEGER ::I,J
CHARACTER C
OPEN(13,FILE='Result.txt')
DO J=1,1
   READ(13,*)C
ENDDO
OPEN(12,FILE='result1.TXT')
DO I=1,11
   READ(13,*) A(I,1:3)
ENDDO
WRITE(12,"(3f10.5)") A
CLOSE(13)
CLOSE(12)
END

得到的结果是:
50.00000  51.00000  52.00000
  53.00000  54.00000  55.00000
  56.00000  57.00000  58.00000
  59.00000  60.00000  28.30186
  28.28920  28.27396  28.25474
  28.23691  28.23033  28.22947
  28.21856  28.20773  28.19656
  28.15063  54.27303  54.27039
  54.26752  54.27453  54.28119
  54.29279  54.30813  54.30784
  54.31368  54.32171  54.28722
我想得到原来一样的数据,我看结果意思是按列读取,怎么能按行读取啊,或怎么能得到和原来一样的矩阵,如果可能的话,不要用A1,A2,A3三列来做,因为我的数据有很多列,谢谢了!

[ Last edited by jjdg on 2014-2-9 at 10:07 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

引用回帖:
18楼: Originally posted by snoopyzhao at 2014-02-11 01:23:56
你这个程序运行的时候没有报错?好奇怪……虽然 gfortran 编译没有问题,但运行会报错

Fortran runtime error: Expected REAL for item 3 in formatted transfer, got INTEGER

你最后那个 write 语句是不对的 ...

刚从家里回到学校,没有报错哈,嘿嘿。那我想得到的那种结果的WRITE应该怎么写啊?
19楼2014-02-11 21:51:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 22 个回答

jjdg

版主 (知名作家)

优秀版主

【答案】应助回帖

感谢参与,应助指数 +1
你想用CHARACTER, INTEGER 还是什么读入??
如果用CHARACTER..
character(len=100):: dummy
read(1,'(a)') dummy
这样就可以了.
或者
比如你要将12 3445 345 3809 97 87赋给a b c d e f五个变量
read(1,*)a,b,c,d,e
如果你在read后面只跟了一个变量名,那么就只能读取一个;你有多少个就把1:3改了即可
努力学习!以正当途径!获得需要的知识!
2楼2014-02-09 10:13:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

引用回帖:
2楼: Originally posted by jjdg at 2014-02-09 10:13:53
你想用CHARACTER, INTEGER 还是什么读入??
如果用CHARACTER..
character(len=100):: dummy
read(1,'(a)') dummy
这样就可以了.
或者
比如你要将12 3445 345 3809 97 87赋给a b c d e f五个变量
read(1,*)a,b ...

谢谢版主,
1,第一个C只是不想要第一行,只要后面的数据;
2,是原始数据有几列就得用几个变量吗?不会吧,我刚接触F,不懂。我在提问前也上网到处找了的,我看好多也都是这样做啊,但为什么我的得出来的结果不对啊?
3,我用三个变量REAL(11)::A1,A2,A3得出的结果和我之前的结果是一样的,错的啊?
求指教!
3楼2014-02-09 10:25:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
duhb655: 金币+10, ★★★很有帮助 2014-02-09 23:49:27
xzhdty: 金币+1, 谢谢参与 2014-02-10 08:48:22
jjdg: 编辑内容 2014-02-13 11:49
读的并没有错,也是按行读的,Fortran 还没有高级到可以按列来读入数据的

错的在于你打印的那句话:
WRITE(12,"(3f10.5)" ) A
这句话只是告诉程序把 A 这个 矩阵中的数据打出来,每行三个实数

但你要清楚的是 Fortran 内部的矩阵存贮是列优先的,所以,它先把第一列拿出来打印,打印完了打印第二列,再打印第三列

你要想按读的方式打印,就要显示地写成循环或者使用 WRITE 支持的隐式循环……

[ Last edited by jjdg on 2014-2-13 at 11:49 ]
4楼2014-02-09 13:21:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 什么时候开奖? +4 CrisMessi 2026-08-18 4/200 2026-08-19 00:53 by gatelove
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +3 瞬息宇宙 2026-08-15 3/150 2026-08-18 21:40 by xiaohuixin
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 9/450 2026-08-18 20:09 by 奶牛小黑
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +51 医学老男孩 2026-08-13 110/5500 2026-08-18 19:07 by icerianxia
[基金申请] 时间戳变了,能看出什么问题? +8 基诺咪客 2026-08-17 11/550 2026-08-18 17:13 by 悠然熊猫
[基金申请] 重要消息,中午系统在维护 +9 yuleib84 2026-08-18 10/500 2026-08-18 16:52 by archvillain
[论文投稿] 投稿咨询 +4 wwm09 2026-08-17 6/300 2026-08-18 15:36 by wwm09
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +13 Ldrop2023 2026-08-13 16/800 2026-08-18 12:25 by 淀粉搬运工
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +4 Tide man 2026-08-14 5/250 2026-08-18 11:35 by Tide man
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] filecode=后面第一个是大写字母 +8 wangze12014 2026-08-14 10/500 2026-08-17 17:05 by xter9665
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
信息提示
请填处理意见