valores usar una tablas tabla manejo hacer cuadro como formatting fortran fortran90 intel-fortran

formatting - usar - manejo de tablas en python



Cadena de formato para salida dependiente de una variable (4)

En lugar de escribir el formato directamente en la declaración de escritura, también es posible usar una variable de carácter.

character(len=32) :: my_fmt my_fmt = ''(3f15.3,3f9.2)'' write(*, my_fmt) x, y, z, (var(i), i = 1, nvari)

Ahora es posible manipular la variable de caracteres para que contenga el recuento de repeticiones deseado antes de la instrucción de escritura, utilizando la denominada escritura interna, o escriba en el archivo interno.

write(my_fmt, ''(a, i0, a)'') ''(3f15.3,'', nvari, ''f9.2)''

(Solo asegúrese de que la longitud declarada de my_fmt sea ​​lo suficientemente larga como para contener la cadena de caracteres completa).

Me gustaría tener una declaración de escritura Fortran formateada para depender de alguna variable. Por ejemplo, podría escribir:

write(*,''(3f15.3,3f9.2)'') x,y,z,(var(i),i=1,nvari)

donde nvari = 3 . Pero, ¿y si, en algunos casos, en realidad tengo 4 variables (es decir, nvari = 4 ). Me gustaría escribir algo como esto:

write(*,''(3f15.3,nvari(f9.2))'') x,y,z,(var(i),i=1,nvari)

Ahora, nvari puede ser cualquier cosa y la salida funcionará como yo quiera. ¿Cómo puedo hacer que algo como esto funcione?


Si tu compilador lo admite, ''(3f15.3, *(f9.2))''

Si tiene un compilador anterior, simplemente use un número más grande de los que tendrá para producir, por ejemplo, ''(3f15.3, 999(f9.2))'' . No tienes que usar el formato.

Para los casos más complicados, puede escribir un formato en una cadena y usarlo como su formato:

write (string, ''( "(3f15.3, ", I4, "(f9.2))" )'' ) nvari write (*, string ) x,y,z, (array(i), i=1,nvari)

Con la comprensión de los formatos, incluida la reversión del formato, el uso de formatos de cadena rara vez es necesario.


Si está utilizando Intel fortran, tiene una extensión propietaria para esto: puede incluir una variable existente en corchetes angulares para actuar como un especificador:

write(*,''(3f15.3,<nvari>f9.2)'') x,y,z,(var(i),i=1,nvari)


Querías escribir algo como esto:

write(*,''(3f15.3,nvari(f9.2))'') x, y, z, (var(i), i=1,nvari)

De hecho, hay un viejo truco en el estándar Fortran que le permite omitir el nvari , así:

write(*,''(3f15.3,(f9.2))'') x, y, z, (var(i), i=1,nvari)

o incluso así:

write(*,''(3f15.3,f9.2)'') x, y, z, (var(i), i=1,nvari)

El estándar dice que el último descriptor en el formato se repite implícitamente tan a menudo como sea necesario para acomodar todas las variables en la lista. Ese ''último descriptor'' podría estar entre paréntesis de manera que el último grupo de descriptores se repita implícitamente, por ejemplo:

write(*,''(3f15.3,(2x,f9.2))'') x, y, z, (var(i), i=1,nvari)