数组构造函数中的不同字符长度 (3/4),如何 trim 字符串 - Fortran

Different CHARACTER lengths (3/4) in array constructor, how to trim strings - fortran

根据对类似问题的回答,我已经声明了此处指示的字符 gfortran does not allow character arrays with varying component lengths 。但是我想使用 trim 函数,因为我需要添加空格以手动填充名称,然后这些变量将用于代码的另一部分。我可以在创建数组的同时trim吗?

Error: Different CHARACTER lengths (3/4) in array constructor at (1)

如果我添加随机字符使它们的长度相同,它可以工作,但由于明显的原因我不能这样做。我用 gfortran 和 mpif90 编译了相同的结果

use mod_maxdims , only : maxstr
integer, parameter :: nvars_ncep = 12

character(len=maxstr), parameter, dimension(nvars_ncep) :: vars_ncep =                  &
                           (/ 'air'              & ! Air temperature                  [      K]
                            , 'pres'             & ! Pressure                         [     Pa]
                            , 'rhum'             & ! Relative humidity                [      %]
                            , 'uwnd'             & ! Zonal wind                       [    m/s]
                            , 'vwnd'             & ! Zonal wind                       [    m/s]
                            , 'pres'             & ! Pressure                         [     Pa]
                            , 'dlwrf'            & ! Downward long wave radiation     [   W/m2]
                            , 'nbdsf'            & ! Near-IR beam radiation           [   W/m2]
                            , 'nddsf'            & ! Near-IR diffuse radiation        [   W/m2]
                            , 'vbdsf'            & ! Visible beam radiation           [   W/m2]
                            , 'vddsf'            & ! Visible beam radiation           [   W/m2]
                            , 'prate'           /) ! Precipitation rate               [kg/m2/s]

gfortran 阻止您编写非标准代码;这是禁止它的语言标准,而不是实现。

如果您按照上述方式初始化字符数组,则所有条目的长度必须相同。在你的情况下,你必须用足够的空间填充每个较短的条目,使它们都一样长。

另一种方法是在程序开始执行时插入条目。如果你写类似 vars_ncep(1) = 'air' 的东西,那么额外的字符将被设置为空格,编译器会为你处理。但是,这意味着您的数组不能是 parameter.