数组构造函数中的不同CHARACTER长度(3/4),如何修剪字符串 - fortran

时间:2015-04-17 10:57:29

标签: fortran fortran90 gfortran

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

  

错误:数组构造函数(1)

中的不同CHARACTER长度(3/4)

如果我添加随机字符以使它们具有相同的长度它可以工作,但出于显而易见的原因我无法做到这一点。我用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]

1 个答案:

答案 0 :(得分:5)

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

如果您已完成初始化字符数组,则所有条目必须具有相同的长度。在你的情况下,你必须用足够的空间填充每个较短的条目,使它们都等同。

另一种方法是在程序执行开始时插入条目。如果您编写类似vars_ncep(1) = 'air'的内容,则其他字符将设置为空格,编译器将为您处理。但是,这意味着您的数组不能是parameter