You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用隐式DO循环配合格式化WRITE初始化Fortran字符数组?

用隐式DO循环结合格式化构造初始化Fortran字符数组

当然可以实现这种批量初始化的需求,不过Fortran没法直接在数组初始化的等号右侧使用WRITE语句,我们可以通过内部文件结合隐式DO循环的方式达成目标,下面是两种实用的实现方案:

方案一:运行时循环初始化

这是最直接的写法,在数组声明后通过循环逐个写入格式化后的字符串:

character(len=8), dimension(5) :: names
integer :: i

do i = 1, 5
  ! 利用内部文件将格式化内容写入数组元素
  write(names(i), '(A,I4.4)') 'ens_', i
end do

方案二:声明时通过数组构造器+自定义函数初始化

如果想在数组声明的同时完成初始化(类似你期望的隐式DO构造写法),可以借助自定义函数配合数组构造器的隐式DO循环:

! 先定义一个生成指定格式字符串的函数
function get_ens_name(idx) result(name)
  integer, intent(in) :: idx
  character(len=8) :: name
  write(name, '(A,I4.4)') 'ens_', idx
end function get_ens_name

! 声明数组时直接用数组构造器调用函数
character(len=8), dimension(5) :: names = [ (get_ens_name(i), i=1,5) ]

关键注意事项

  • 格式化字符串(A,I4.4)要严格匹配字符数组的长度:'ens_'占4个字符,I4.4确保数字占4位(不足补前导零),加起来正好8位,避免出现字符串截断或不必要的空格填充。
  • 数组构造器的语法[ (func(i), i=1,5) ]是Fortran 2003及以上标准支持的,旧标准可以替换为(/ (func(i), i=1,5) /)。

内容的提问来源于stack exchange,提问作者guezo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:00:51