📅  最后修改于: 2023-12-03 15:00:50.573000             🧑  作者: Mango
Fortran 是一种广泛用于科学和工程计算的高级编程语言。在大多数应用程序中,文件 I/O (输入输出) 是必要的,因为它们提供了一种将数据存储在硬盘上并将数据导入到程序中的方式。
本文将为您介绍 Fortran 中的文件输入和输出,包括基本的文件操作、打开和关闭文件、读取和写入数据以及处理错误。
在 Fortran 中,文件操作需要将文件打开,读取或写入数据,然后关闭文件。
通过以下示例创建一个名为 data.txt 的文件:
program file_io
implicit none
integer:: i, n
real:: x(10)
!打开文件并写入数据
open(unit=10, file="data.txt", status="new")
do i = 1, 10
x(i) = i**2
write(10, *) x(i)
end do
close(10)
end program file_io
上述代码创建了一个名为 data.txt 的新文件,并将一个包含前 10 个整数的数组写入该文件。下一节将介绍打开、关闭、读取和写入文件的更详细过程。
在 Fortran 中,使用 open
函数打开文件,使用 close
函数关闭文件。
以下是打开文件的语法:
open(unit=unit_number, file=file_name, [access=access_mode, action=[read/write/append], form=[formatted/unformatted], status=[old/new/unknown], iostat=iostat_var, [err=label], [position=position_number]))
其中,unit_number
是一个可选的整数,用于关联内部 I/O 单元号。file_name
是文件路径,access_mode
指示访问文件的方式(sequential
或 direct
),action
指示执行读取、写入或附加操作,form
指示使用格式输入或非格式输入,status
指示文件是新文件(new
)、现有文件(old
)还是未知的(unknown
)。
以下是关闭文件的语法:
close(unit=unit_number, iostat=[iostat_var], [err=label])
其中,unit_number
指示将要关闭的文件的内部 I/O 单元号。
以下示例演示了如何打开文件、写入数据以及关闭文件:
program file_io
implicit none
integer:: i
real:: x(10)
integer:: unit_number
!打开文件并写入数据
open(unit=unit_number, file="data.txt", status="new")
do i = 1, 10
x(i) = i**2
write(unit_number, *) x(i)
end do
!关闭文件
close(unit_number)
end program file_io
在上面的示例中,我们通过 unit_number
变量指定了内部 I/O 单元号,以便其他提及该文件的 I/O 语句都可以访问该文件。 status="new"
用于指示文件是新文件。
在 Fortran 中,可以使用 read
、write
、print
和 format
函数来读取或写入文件中的数据。以下是 read
和 write
函数的语法:
read(unit=unit_number, fmt=format_specifier, iostat=iostat_var, [end=loop_label], [err=label], [advance=advance_control], [rec=record_number], [size=record_size]) data_list
write(unit=unit_number, fmt=format_specifier, iostat=iostat_var, [end=loop_label], [err=label], [advance=advance_control], [rec=record_number], [size=record_size]) data_list
其中,unit_number
和 iostat_var
都是可选的整数,用于指定内部 I/O 单元号和 I/O 状态标志变量的值。format_specifier
是一个格式字符串,指定如何读取和写入数据。advance_control
是一个可选字符,指示输出之后文件指针的位置(例如,使用 advance="no"
可以将指针留在输出的最后一个位置以用于后续的写操作)。
以下示例演示了如何读取文件中的数据:
program file_io
implicit none
integer:: i
real:: x(10)
integer:: unit_number, iostat_var
!打开文件并读取数据
open(unit=unit_number, file="data.txt", status="old")
do i = 1, 10
read(unit_number, *, iostat=iostat_var) x(i)
if (iostat_var /= 0) then
write(*,*) "Error reading data from file!"
exit
end if
end do
!关闭文件
close(unit_number)
end program file_io
在上述示例中,我们通过 status="old"
指示文件是现有文件。在循环中读取每个元素时,我们检查 iostat_var
的值以确保读取操作成功。
下面的示例演示了如何将数据写入文件:
program file_io
implicit none
integer:: i
real:: x(10)
integer:: unit_number
!打开文件并写入数据
open(unit=unit_number, file="data.txt", status="new")
do i = 1, 10
x(i) = i**2
write(unit_number, *) x(i)
end do
!关闭文件
close(unit_number)
end program file_io
在上述示例中,我们使用 status="new"
指示文件是新文件,并通过 write
函数将数组 x
的每个元素写入文件。
在 Fortran 中,可以使用 iostat
和 err
选项处理 I/O 错误。 iostat
用于获取 I/O 操作的状态,而 err
用于指定跳转到的标签(如果操作失败)。
以下是 iostat
和 err
的示例用法:
program file_io
implicit none
integer:: i
real:: x(10)
integer:: unit_number, iostat_var
!打开文件并读取数据
open(unit=unit_number, file="data.txt", status="old", iostat=iostat_var)
if (iostat_var /= 0) then
write(*,*) "Error opening file!"
stop
end if
do i = 1, 10
read(unit_number, *, iostat=iostat_var, err=100) x(i)
end do
!关闭文件
close(unit_number)
!处理错误
100 write(*,*) "Error reading data from file!"
end program file_io
在上述示例中,我们使用 iostat
指定 iostat_var
变量,以获取 I/O 操作的状态。如果打开文件失败,该程序将终止并输出错误消息。我们还使用 err
选项指定了 100 标签,以便在发生 I/O 错误时跳转到该标签并显示错误消息。
本文介绍了 Fortran 中的文件 I/O,包括打开和关闭文件、读取和写入数据以及处理错误。适当地使用文件 I/O 可以帮助您将数据存储在磁盘上并轻松地导入和导出程序中。