在fortran中,从文本文件中读取一个变量作为同一文件中其他两个变量的函数

在fortran中,从文本文件中读取一个变量作为同一文件中其他两个变量的函数,fortran,gfortran,Fortran,Gfortran,我有一个数据文件,其形式与以下示例文件类似: 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

我有一个数据文件,其形式与以下示例文件类似:

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分配给时间,将指数1,2,3,4,5分配给H,因此
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, m
         Do j = 1, n

          Print*, T1(i,j)

         Enddo
       Enddo

    End Program Sort



您可以从以下简单的read语句中读取所有三个值:

   integer x,y,z

   read(5,*) x,y,z

它应该从每行读取所有3个值。

首先,编写一段代码来忽略输入文件中的标题。接下来,编写另一行代码来读取包含3个整数值的行。然后编写一行代码,按照规则将值插入数组
T
。重复最后两个步骤,直到到达输入文件的末尾。关于更多的提示,请发表您自己的最佳尝试,我们将帮助您完成。对于代码示例,我们确实有许多类似的问题。请先看那里。我们有关于如何跳过标题的答案,我们有关于如何读取列中数据的答案。请给我们一些关于您发布的代码的评论。编译时会发生什么?当你运行它时会发生什么?有错误信息吗?复制它们。错误的结果?给他们看。另请参阅和。@HighPerformanceMark非常感谢您的回复。我通过添加我正在编写的代码更新了我的问题。(刚刚完成)。它不是很优雅,但它以一种粗鲁的方式达到了我的目的。如果我知道指数,我可以得到T1的值。如果我可以直接询问任何给定时间和H的T1值,那就太好了。任何关于代码的建议都将不胜感激。请善意地回复,我不太擅长编码。要获得给定时间的值,您必须搜索数组。如果你想在两个数据点之间留出一段时间,可以进行插值。