从文本文件中读取一个变量,将其作为fortran

时间:2020-09-15 11:38:31

标签: 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        900  
10       5        101  
20       1        102  
20       2        103  
20       3        104   
20       4        105  
20       5        106

这是数据在文本文件中的显示方式。我需要阅读第三列作为前两列的函数,即,我需要阅读time(1) =0time(2) = 10time(3) = 20H(1) = 1H(2) = 2......,H(5) = 5T(2,1) = 600T(1,1) = 100

有人可以帮我一些提示吗?谢谢。

已更新

我正在编写程序,最后得到一个逻辑,该逻辑完成了我想做的事情。下面的程序读取数据(上面给出),使之有意义,最后创建两个变量T1的维数组。它为时间分配索引1,2和3,为H分配索引1,2,3,4,5,因此T(i,j)对应于time = iH = j处的T1值。因此,如果您知道索引,则可以找到任何T1值。

但是,如果我可以为time = 20H = 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


1 个答案:

答案 0 :(得分:0)

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

   integer x,y,z

   read(5,*) x,y,z

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

相关问题