gpt4 book ai didi

fortran - 在 FORTRAN 中读取输入文件

转载 作者:行者123 更新时间:2023-12-01 08:41:12 25 4
gpt4 key购买 nike

目的:创建一个程序,该程序需要两个单独的文件,打开并读取它们,将它们的内容分配给数组,对这些数组进行一些数学运算,创建一个带有产品编号的新数组,打印到一个新文件。够简单吧?

我的输入文件开头有注释字符。一个麻烦是,它们是'#',它是大多数绘图程序的注释字符,但不是 FORTRAN。告诉计算机不要看这些字符的简单方法是什么?由于我以前没有 FORTRAN 经验,因此我正在使用两个测试文件来解决这个问题。这是我目前所拥有的:

PROGRAM gain
IMPLICIT NONE
REAL, DIMENSION (1:4, 1:8) :: X, Y, Z
OPEN(1, FILE='test.out', &
STATUS='OLD', ACTION='READ') ! opens the first file
READ(1,*), X
OPEN(2, FILE='test2.out', &
STATUS='OLD', ACTION='READ') ! opens the second file
READ(2,*), Y
PRINT*, X, Y

Z = X*Y
! PRINT*, Z
OPEN(3, FILE='test3.out', STATUS='NEW', ACTION='WRITE') !creates a new file
WRITE(3,*), Z
CLOSE(1)
CLOSE(2)
CLOSE(3)
END PROGRAM

PS。请不要用一堆代码猴子 gobblety gook 压倒我。我是一个完全的编程新手。我不懂所有的术语,这就是为什么我来这里而不是在现有网站上寻求帮助的原因。谢谢。

最佳答案

如果你的意思是注释只在文件的开头,这很简单——不需要计算注释行或回退文件——你可以将这些行读成一个字符串并测试它们是否是评论。然后你最终会遇到一个非注释行。问题:它将被读入一个字符串,因此不能用于常规读取......解决方案......使用“退格”来取消读取一条记录,以便您现在可以使用普通文件读取来读取文件的其余部分。如果注释行散布在整个文件中,则需要稍微复杂一点的解决方案——如前所述,将这些行读入字符串,然后从字符串中读取。

这是一个可行的示例...我假设“#”位于第一列以及其他各种简化假设中。一些建议:将您的子例程和函数放入一个模块并“使用”该模块——这将允许编译器检查接口(interface)。在开发程序时,尽可能多地使用代码检查和警告选项——尤其是下标边界检查——最终会节省时间。

附:从 Fortran 90 开始,它正式成为“Fortran”——对于 FORTRAN 77 及更早版本,它是“FORTRAN”。

module read_file_module

implicit none

contains

subroutine read_file (UnitNum, FileName, NumRows, NumCols, Array )

integer, intent (in) :: UnitNum
character (len=*), intent (in) :: FileName
integer, intent (in) :: NumRows, NumCols
real, dimension (1:NumRows, 1:NumCols), intent (out) :: Array

character (len=300) :: line
integer :: i, j

open (unit=UnitNum, file=FileName, status='old', action='read' )

ReadComments: do
read (UnitNum, '(A)') line
if (line (1:1) /= "#") exit ReadComments
end do ReadComments

backspace (UnitNum)

do i=1, NumRows
read (UnitNum, *) (Array (i, j), j=1,NumCols)
end do

close (UnitNum)

return

end subroutine read_file

end module read_file_module




program test_prog

use read_file_module

implicit none

real, dimension (1:8, 1:4) :: Array
integer :: i, j

call read_file (66, 'TestFile.txt', 8, 4, Array)

do i=1, 8
write (*, '( 4(2X, F7.3) )' ) (Array (i, j), j=1,4)
end do

end program test_prog

还有一些测试数据来展示输入数据的灵 active :

#  comment one
# comment two
1.1 2.0 3.0 4.1
1.2 2.0 3.0 4.2
1.3 2.0 3.0 4.3
1.4
2.0 3.0 4.4
1.5 2.0 3.0 4.5
1.6 2.0 3.0 4.6


1.7 2.0 3.0 4.7
1.8 2.0 3.0 4.8

关于fortran - 在 FORTRAN 中读取输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com