问题描述
Time H T
0 1 100
0 2 200
0 3 300
0 4 400
0 5 500
10 1 600
10 2 700
10 3 800
10 4 900
10 5 101
20 1 102
20 2 103
20 3 104
20 4 105
20 5 106
这是数据在文本文件中的显示方式。我需要阅读第三列作为前两列的函数,即,我需要阅读time(1) =0
,time(2) = 10
,time(3) = 20
和H(1) = 1
,H(2) = 2......,H(5) = 5
和T(2,1) = 600
,T(1,1) = 100
等
有人可以帮我一些提示吗?谢谢。
已更新
我正在编写程序,最后得到一个逻辑,该逻辑完成了我想做的事情。下面的程序读取数据(上面给出),使之有意义,最后创建两个变量T1的维数组。它为时间分配索引1,2和3,为H分配索引1,2,3,4,5,因此T(i,j)
对应于time = i
,H = j
处的T1值。因此,如果您知道索引,则可以找到任何T1值。
但是,如果我可以为time = 20
和H = 5
索取T的值而不用担心索引,那会更好。请提出建议
Program Sort
IMPLICIT NONE
Real,Dimension(20) :: time,H,T
Real,Dimension(20) :: time1
Real,Dimension(20) :: H1
Real,Dimension(20,20) :: T1
Integer :: i,j,n,k,m,l
Open(1,file = "trial-data.dat")
Do i = 1,20
100 Continue
Read(1,*,err = 100,end = 101) time(i),H(i),T(i)
k = i
Enddo
101 Continue
m = 1
Do i = 1,k-1
If( time(i+1) .eq. time(i)) then
time1(m) = time(i)
else if ( time(i+1) .ne. time(i)) then
m = m + 1
time1(m) = time(i+1)
Endif
Enddo
n = 0
Do i = 1,k
If (H(i+1) .eq. H(1)) then
n = i
Exit
Endif
Enddo
Do i = 1,n
H1(i) = H(i)
Enddo
l = 0
Do i = 1,m
Do j = 1,n
T1(i,j) = T(j+l)
Enddo
l = l+5
Enddo
Do i = 1,n
Print*,T1(i,j)
Enddo
Enddo
End Program Sort
解决方法
您可以从一个简单的read语句中读取所有三个值,如下所示:
integer x,y,z
read(5,*) x,z
,它应该从每一行读取所有3个值。