在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值,那就太好了。任何关于代码的建议都将不胜感激。请善意地回复,我不太擅长编码。要获得给定时间的值,您必须搜索数组。如果你想在两个数据点之间留出一段时间,可以进行插值。