📜  Fortran-文件输入输出(1)

📅  最后修改于: 2023-12-03 15:00:50.573000             🧑  作者: Mango

Fortran 文件输入输出

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 指示访问文件的方式(sequentialdirect),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 中,可以使用 readwriteprintformat 函数来读取或写入文件中的数据。以下是 readwrite 函数的语法:

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_numberiostat_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 中,可以使用 iostaterr 选项处理 I/O 错误。 iostat 用于获取 I/O 操作的状态,而 err 用于指定跳转到的标签(如果操作失败)。

以下是 iostaterr 的示例用法:

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 可以帮助您将数据存储在磁盘上并轻松地导入和导出程序中。