io

输入/输出

loadtxt - 从文本文件加载二维数组

状态

实验性

描述

从文本文件加载一个秩为 2 的 array

语法

call loadtxt (filename, array [, skiprows] [, max_rows] [, fmt])

参数

filename: 应为一个字符表达式,包含要从中加载秩为 2 的 array 的文件名。

array: 应为一个可分配的秩为 2 的数组,类型为 realcomplexinteger

skiprows (可选): 跳过前 skiprows 行。如果跳过的行数超过现有行数,则将返回一个大小为 0 的数组。默认为 0。

max_rows (可选): 在 skiprows 行之后读取 max_rows 行内容。负值表示读取所有行。值为零表示不读取任何行。默认值为 -1。

fmt (可选): 用于读取文本的 Fortran 格式说明符。默认为数据类型的写入格式。将 fmt 设置为 '*' 将指定列表定向读取。

返回值

返回一个已分配的秩为 2 的 array,其中包含 filename 的内容。

示例

program example_loadtxt
  use stdlib_io, only: loadtxt
  implicit none
  real, allocatable :: x(:, :)
  call loadtxt('example.dat', x)

  ! Can also use list directed format if the default read fails.
  call loadtxt('example.dat', x, fmt='*')
end program example_loadtxt

open - 打开文件

状态

实验性

描述

返回已打开以进行读取、写入或读写操作的文件的单元号。该文件可能是文本文件或二进制文件。所有文件均使用流式访问打开。

语法

u = open (filename [, mode] [, iostat])

参数

filename: 应为一个字符表达式,包含要打开的文件名。

mode (可选): 应为一个字符表达式,包含描述文件使用方式的字符。可用的模式有

字符 含义
'r' 打开以进行读取 (默认)
'w' 打开以进行写入,首先截断文件
'x' 打开以进行独占创建,如果文件已存在则失败
'a' 打开以进行写入,如果文件存在则追加到文件末尾
'+' 打开以进行更新 (读取和写入)
'b' 二进制模式
't' 文本模式 (默认)

默认 mode'rt' (即打开以读取文本文件)。mode 可以包含四种不同的文件打开方法之一 (即,'r''w''x''a')。这四种方法可以与字符 '+' 关联以打开文件进行更新。此外,还可以指定文件应作为二进制文件 ('b') 还是文本文件 ('t') 处理。

iostat (可选): 应为类型为 integer 的标量,如果提供,则接收 open 的错误状态。如果不存在错误,则 iostat 为零。

u: 应为类型为 integer 的标量,指定与文件 filename 关联的单元号。

返回值

结果是类型为 integer 的标量。

示例

program example_open
  use stdlib_io, only: open
  implicit none
  integer :: u
  u = open ('example.dat', 'wt')
  write (u, '(a)') 'This is an example for open'
  close (u)
end program example_open

savetxt - 将二维数组保存到文本文件

状态

实验性

描述

将一个秩为 2 的 array 保存到文本文件。

语法

call savetxt (filename, array)

参数

filename: 应为一个字符表达式,包含将包含二维 array 的文件名。

array: 应为一个秩为 2 的数组,类型为 realcomplexinteger

输出

提供一个名为 filename 的文本文件,其中包含秩为 2 的 array

示例

program example_savetxt
  use stdlib_io, only: savetxt
  implicit none
  real :: x(3, 2) = 1
  call savetxt('example.dat', x)
end program example_savetxt

load_npy

状态

实验性

描述

从 npy 格式的二进制文件加载一个 array

语法

call load_npy (filename, array[, iostat][, iomsg])

参数

filename: 应为一个字符表达式,包含要从中加载 array 的文件名。此参数为 intent(in)

array: 应为任何秩的可分配数组,类型为 realcomplexinteger。此参数为 intent(out)

iostat: 默认整数,包含加载到文件的状态,成功时为零。这是一个可选参数,如果不存在,则程序将在非零状态下停止。此参数为 intent(out)

iomsg: 延迟长度字符值,包含错误消息(如果 iostat 非零)。这是一个可选参数,如果不存在,则错误消息将被丢弃。此参数为 intent(out)

返回值

如果成功,则返回一个已分配的 array,其中包含 filename 的内容。

示例

program example_loadnpy
  use stdlib_io_npy, only: load_npy
  implicit none
  real, allocatable :: x(:, :)
  call load_npy('example.npy', x)
end program example_loadnpy

save_npy

状态

实验性

描述

将一个 array 保存到 npy 格式的二进制文件。

语法

call save_npy (filename, array[, iostat][, iomsg])

参数

filename: 应为一个字符表达式,包含将包含 array 的文件名。此参数为 intent(in)

array: 应为任何秩的数组,类型为 realcomplexinteger。此参数为 intent(in)

iostat: 默认整数,包含保存到文件的状态,成功时为零。这是一个可选参数,如果不存在,则程序将在非零状态下停止。此参数为 intent(out)

iomsg: 延迟长度字符值,包含错误消息(如果 iostat 非零)。这是一个可选参数,如果不存在,则错误消息将被丢弃。此参数为 intent(out)

输出

提供一个名为 filename 的 npy 文件,其中包含秩为 2 的 array

示例

program example_savenpy
  use stdlib_io_npy, only: save_npy
  implicit none
  real :: x(3, 2) = 1
  call save_npy('example.npy', x)
end program example_savenpy

getline

状态

实验性

描述

将格式化单元中的整行读取到字符串变量中

语法

call getline (unit, line[, iostat][, iomsg])

call getline (line[, iostat][, iomsg])

参数

unit: 格式化输入单元。此参数为 intent(in)。如果未指定 unit,则使用标准输入。

line: 延迟长度字符或 string_type 变量。此参数为 intent(out)

iostat: 默认整数,包含从单元读取的状态,成功时为零。这是一个可选参数,如果不存在,则程序将在非零状态下停止。此参数为 intent(out)

iomsg: 延迟长度字符值,包含错误消息(如果 iostat 非零)。这是一个可选参数,如果不存在,则错误消息将被丢弃。此参数为 intent(out)

示例

program example_getline
  use, intrinsic :: iso_fortran_env, only: input_unit, output_unit
  use stdlib_io, only: getline
  implicit none
  character(len=:), allocatable :: line
  integer :: stat

  call getline(input_unit, line, stat)
  do while (stat == 0)
    write (output_unit, '(a)') line
    call getline(input_unit, line, stat)
  end do
end program example_getline

格式化常量

状态

实验性

描述

用于以其完整精度打印整数、浮点数和复数的格式化常量。提供 stdlib_kinds 模块中定义的所有种类的格式。

示例

program example_fmt_constants
  use stdlib_kinds, only: int32, int64, sp, dp
  use stdlib_io, only: FMT_INT, FMT_REAL_SP, FMT_REAL_DP, FMT_COMPLEX_SP, FMT_COMPLEX_DP
  implicit none

  integer(kind=int32) :: i32
  integer(kind=int64) :: i64
  real(kind=sp)       :: r32
  real(kind=dp)       :: r64
  complex(kind=sp)    :: c32
  complex(kind=dp)    :: c64

  i32 = 100_int32
  i64 = 100_int64
  r32 = 100.0_sp
  r64 = 100.0_dp
  c32 = cmplx(100.0_sp, kind=sp)
  c64 = cmplx(100.0_dp, kind=dp)

  print "(2("//FMT_INT//",1x))", i32, i64 ! outputs: 100 100
  print FMT_REAL_SP, r32                  ! outputs: 1.00000000E+02
  print FMT_REAL_DP, r64                  ! outputs: 1.0000000000000000E+002
  print FMT_COMPLEX_SP, c32               ! outputs: 1.00000000E+02  0.00000000E+00
  print FMT_COMPLEX_DP, c64               ! outputs: 1.0000000000000000E+002  0.0000000000000000E+000

end program example_fmt_constants