programas - Variables de caracteres asignables en Fortran
problemas resueltos de programaciĆ³n en fortran 95 pdf (2)
Mi código (reducido a lo que creo que es relevante para esta pregunta) es
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
Funciona bien con el compilador Fortran de Intel, sin embargo, gfortran me da un par de errores, el primero en la línea diciendo
CHARACTER(len=:), allocatable :: input_trim
No estoy seguro de qué compilador es "correcto" con respecto al estándar Fortran. Además, ¿no sé cómo lograr lo que necesito de una manera diferente? Creo que lo que estoy haciendo es más una solución de todos modos. Lo que necesito es una variable de caracteres que contenga exactamente el nombre de archivo que se ingresó sin espacios siguientes.
EDIT: el error es "Error de sintaxis en la declaración de CHARACTER". gfortran --version me da "GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)"
EDIT 2: tienes razón con respecto a la asignación: con ifort, no lo necesito. Y gfortran se bloquea antes de eso así que tal vez no necesite asignarlo tampoco, pero no puedo probar esto en este momento ...
Esta
character (len=:), allocatable :: input_trim
ciertamente es sintácticamente correcto en Fortran 2003. No dices cuál es el error que plantea gfortran
, así que no puedo comentar por qué no acepta la línea, quizás tengas instalada una versión anterior del compilador.
Con un compilador Fortran actualizado ( por ejemplo, Intel Fortran v14.xxx) no es necesario asignar el tamaño de la variable de caracteres antes de asignarlo, simplemente puede escribir
input_trim = trim(input)
Tenga en cuenta que
read(*,*) input_trim
no funcionará
[No tengo la reputación de agregar esto como comentario.]
El compilador de Intel es "correcto" con respecto al estándar 2003, y si tiene una versión reciente de gfortran, puede encontrar que también es compatible con el escalar asignable.
Sin embargo, en lo que respecta a una "solución": ¿por qué es necesario "una matriz de caracteres que contiene exactamente el nombre de archivo que se ingresó sin espacios siguientes"? En general, los espacios finales no serán un problema (o puede TRIM
según sea necesario).