24小时热门版块排行榜    

查看: 3982  |  回复: 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的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

snoopyzhao

至尊木虫 (职业作家)


jjdg: 金币+1, 辛苦了 2014-02-13 11:52:05
引用回帖:
7楼: Originally posted by duhb655 at 2014-02-09 23:47:30
zhao老师,要不您帮帮忙,我给出一个小例子,然后我说出想要做什么(很简单),然后您帮我写一下主要的句子我学习学习,行不。TXT数据如下:
50     40     28.30186          54.27303
51     41     28.28920  ...

一个 A 是没有办法既存整弄,又存实型的。分成两个可以:
CODE:
PROGRAM test

   IMPLICIT NONE
   INTEGER :: i, ios
   INTEGER, DIMENSION(11,2) :: c1_2
   REAL, DIMENSION(11,2) :: c3_4
   
   OPEN(UNIT = 12, FILE = 'aa.txt')
   
   DO i=1,11
      READ(12,'(I2,TR5,I2,TR5,F8.5,TR10,F8.5)') c1_2(i,:), c3_4(i,:)
   END DO
   
   DO i=1,11
      WRITE(*, '(2(TR2,I2),2(TR2,F8.5))') c1_2(i,:), c3_4(i,:)
   END DO

END PROGRAM test

14楼2014-02-10 02:45:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

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的回帖

polypro

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2014-02-10 08:48:33
接3L,将write那一句替换就行了
DO I=1,11
   write(13,*) A(I,1:3)
ENDDO

» 本帖已获得的红花(最新10朵)

泉涸,鱼相与处于陆,相呴以湿,相濡以沫,不如相忘于江湖。
5楼2014-02-09 15:07:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

physliebe

新虫 (小有名气)

jjdg: 编辑内容 2014-02-13 11:50
引用回帖:
4楼: Originally posted by snoopyzhao at 2014-02-09 13:21:38
读的并没有错,也是按行读的,Fortran 还没有高级到可以按列来读入数据的

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

但你 ...

WRITE(12,"(3f10.5)"; ) A,这种输出矩阵的方法试了一下,报错

[ Last edited by jjdg on 2014-2-13 at 11:50 ]
Whenever you feel like criticizing any one,just remember that all the people in this world haven’t had the advantages that you’ve had.
6楼2014-02-09 19:33:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

引用回帖:
4楼: Originally posted by snoopyzhao at 2014-02-09 13:21:38
读的并没有错,也是按行读的,Fortran 还没有高级到可以按列来读入数据的

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

但你 ...

zhao老师,要不您帮帮忙,我给出一个小例子,然后我说出想要做什么(很简单),然后您帮我写一下主要的句子我学习学习,行不。TXT数据如下:
50     40     28.30186          54.27303
51     41     28.28920          54.27039               
52     42     28.27396          54.26752                 
53     43     28.25474          54.27453                  
54     44     28.23691          54.28119                 
55     45     28.23033          54.29279                  
56     46     28.22947          54.30813                  
57     47     28.21856          54.30784               
58     48     28.20773          54.31368                 
59     49     28.19656          54.32171                  
60     50     28.15063          54.28722
四列数据,前两列为整型,后俩为实型,把这个TXT数据读取存在A中,然后再把A导出为另一个TXT,谢谢您!
7楼2014-02-09 23:47:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

送红花一朵
引用回帖:
5楼: Originally posted by polypro at 2014-02-09 15:07:37
接3L,将write那一句替换就行了
DO I=1,11
   write(13,*) A(I,1:3)
ENDDO

不好意思,BB没了,就送红花一朵。这个我好像解决了,但有个问题,原TXT中有的列是整型有的是实型,我这样一下全给别人弄成实型了,麻烦您看一下7楼,不知道您能不能给点意见,谢谢啦!
8楼2014-02-09 23:52:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

jjdg: 编辑内容 2014-02-13 11:51
引用回帖:
6楼: Originally posted by physliebe at 2014-02-09 19:33:13
WRITE(12,"(3f10.5)"; ) A,这种输出矩阵的方法试了一下,报错...

谢谢您,不过是:
WRITE(12,"(3f10.5)" ) A

[ Last edited by jjdg on 2014-2-13 at 11:51 ]
9楼2014-02-09 23:52:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

引用回帖:
6楼: Originally posted by physliebe at 2014-02-09 19:33:13
WRITE(12,"(3f10.5)"; ) A,这种输出矩阵的方法试了一下,报错...

我晕怎么又变成了笑脸,不是;)  而只是)
10楼2014-02-09 23:54:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 duhb655 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +50 医学老男孩 2026-08-13 109/5450 2026-08-18 16:56 by 医学老男孩
[教师之家] 两姐妹,一个辛辛苦苦30岁工作当大学教师,另一个23岁就工作当开车教练 +3 瞬息宇宙 2026-08-11 7/350 2026-08-18 16:42 by LNP@mRNA
[基金申请] 明天放榜? +4 Shxjjxjkx 2026-08-18 4/200 2026-08-18 15:59 by abcabc1133
[论文投稿] 投稿咨询 +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
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +13 Ldrop2023 2026-08-13 16/800 2026-08-18 12:25 by 淀粉搬运工
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 8/400 2026-08-18 11:47 by gltch
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +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
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +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
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[基金申请] 重要来源:本周末出结果 +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
信息提示
请填处理意见