resueltos programas programaciĆ³n problemas ejemplos comandos ciclo fortran character trim

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).