我是Fortran的新手,但我正在尝试修改Fortran代码,而我在做一些我认为可能很简单的事情时遇到了麻烦。
我想调整一个名为original.f的Fortran文件,以便它生成一个名为input.inp的输入文件,并用之前在original.f中计算的4个整数填充它,以便input.inp看起来像,例如:
&input
A = 1
B = 2
C = 3
D = 4
&end
我知道如何写这种格式:
OPEN(UNIT=10,FILE='input.inp')
WRITE (10,00001) 1,2,3,4
...
...
...
00001 Format (/2x,'&input',
& /2x,'A = ',i4,
& /2x,'B = ',i4,
& /2x,'C = ',i4,
& /2x,'D = ',i4,
& /2x,'&end')
(或类似的东西,当我让它工作时我可以摆弄)但我不知道如何创建input.inp文件将其写入其中然后使用此输入文件。
输入文件需要用于运行名为" exec"的可执行文件。我会在bash中运行它:
./exec < input.inp > output.out
其中output.out包含两个名为eg(11)和ai(11,6,2)的数组(给定维度),如:
eg(1)= 1
eg(2)= 2
...
...
...
eg(11)= 11
ai(1,1,1)= 111
ai(1,2,1)= 121
...
...
...
ai(11,6,2)=1162
最后,我需要将这些输入读回到original.f中,以便可以在文件中进一步使用它们。我在original.f的开头定义了这些数组:
COMMON /DATA / eg(11),ai(11,6,2)
但我不确定Fortran是否会从output.out中读取linw来填充这些数组。
对此过程中任何阶段的任何帮助都将非常感激。
非常感谢
詹姆斯
答案 0 :(得分:1)
由于您已经展示了如何创建输入文件,我假设问题是如何阅读它。该代码显示了&#34; a&#34;和&#34; b&#34;跳过第一行后,可以从连续的行中读取。在Windows上,如果生成的可执行文件是a.exe,则命令a.exe&lt; data.txt或类型data.txt | a.exe将从data.txt中读取。
program xread
implicit none
character (len=10) :: words(3)
integer, parameter :: iu = 5 ! assuming unit 5 is standard input
integer :: a,b
read (iu,*) ! skip line with &input
read (iu,*) words ! read "a", "=", and "1" into 3 strings
read (words(3),*) a ! read integer from 3rd string
read (iu,*) words ! read "b", "=", and "1" into 3 strings
read (words(3),*) b ! read integer from 3rd string
print*,"a =",a," b =",b
end program xread
答案 1 :(得分:0)
如果我正确理解了扩展的问题,你必须处理一个输出文件,由你未编写的其他代码生成,使用eg(1) = ...
这样的行。
对于您事先了解元素数量及其排序的最简单情况,您只需从后面搜索每一行的等号:
program readme
implicit none
character(100) :: buffer
integer :: i, j, k, pos, eg(11), ai(11,6,2)
do i = 1,11
read*, buffer
pos = index(buffer, '=', back = .true.)
read(buffer(pos+1:), *) eg(i)
enddo
! I have assumed an arbitrary ordering here
do k = 1,2
do i = 1,11
do j = 1,6
read*, buffer
pos = index(buffer, '=', back = .true.)
read(buffer(pos+1:), *) ai(i,j,k)
enddo
enddo
enddo
end program
为简单起见,假设数据是提供给标准输入的。