CyRhmU.jpeg
查看: 3452  |  回复: 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 的主题更新
信息提示
请填处理意见