Fortran中可分配的字符变量

时间:2014-01-03 16:18:50

标签: fortran character trim

我的代码(根据我认为与此问题相关的内容)是

PROGRAM test

IMPLICIT NONE

CHARACTER(len=37) input
CHARACTER(len=:), allocatable :: input_trim


WRITE(*,*) 'Filename?'
READ(*,*) input
ALLOCATE(character(len=LEN(TRIM(input))) :: input_trim)
input_trim=trim(input)

.
.
.

END PROGRAM test

它适用于英特尔的Fortran编译器,但是gfortran给了我一些错误,第一个错误,

CHARACTER(len=:), allocatable :: input_trim

我不确定哪个编译器对Fortran标准是“正确的”。另外,我不知道如何以不同的方式实现我的需求?!我认为我正在做的更多是一种解决方法。我需要的是一个字符变量,其中包含输入的文件名,没有后续空格。

编辑:错误是“CHARACTER声明中的语法错误”。 gfortran --version给了我“GNU Fortran(GCC)4.4.7 20120313(Red Hat 4.4.7-3)”

编辑2:关于分配你是对的:使用ifort,我不需要它。并且gfortran在此之前崩溃所以也许它不需要分配但是我现在无法测试这个......

2 个答案:

答案 0 :(得分:16)

character (len=:), allocatable :: input_trim
在Fortran 2003中,

在语法上是正确的。你没有说gfortran提出的错误是什么,所以我不能评论为什么它不接受这条线 - 也许你有一个旧的已安装的编译器版本。

使用最新的Fortran编译器(例如 Intel Fortran v14.xxx),您无需在分配字符变量之前分配字符变量的大小,您只需编写

input_trim = trim(input)

请注意

read(*,*) input_trim

无效。

答案 1 :(得分:0)

使用Absoft Fortran可以编译(尚未运行):

character,dimension(:),allocatable::Line_for_IO !Metcalf,Reid,Cohen p. 107, w/mods
if(allocated(Line_for_IO)) deallocate(Line_for_IO)
allocate(Line_for_IO(7*n+40))