command-line - pairs - poligono en r
Fortran: `READ(*,*)`!=Argumentos de línea de comandos. ¿Cómo usar argumentos de línea de comando? (1)
GCC versión 4.6
El problema: para encontrar una forma de ingresar los parámetros al ejecutable, digamos a.out
, desde la línea de comando; más específicamente, ingrese una matriz de números de doble precisión.
Intento: utilizar el comando READ(*,*)
, que es más antiguo en el estándar: Program test.f
-
PROGRAM MAIN
REAL(8) :: A,B
READ(*,*) A,B
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
La ejecución -
$ gfortran test.f
$ ./a.out 3.D0 1.D0
Esto no funcionó. En un momento de búsqueda profunda, encontré que
$./a.out
3.d0,1.d0
4.0000000000000000 0
funciona, pero la segunda línea es un mensaje de entrada, y el objetivo de hacer esto en una línea no se logra. Además, COMMAND_ARGUMENT_COUNT()
muestra que los números introducidos en el indicador de entrada en realidad no cuentan como ''argumentos de línea de comando'', a diferencia de PERL.
Si desea que los argumentos se envíen a su programa en la línea de comandos, use la subrutina intrínseca estándar (desde Fortran 2003) GET_COMMAND_ARGUMENT
. Algo como esto podría funcionar
PROGRAM MAIN
REAL(8) :: A,B
integer :: num_args, ix
character(len=12), dimension(:), allocatable :: args
num_args = command_argument_count()
allocate(args(num_args)) ! I''ve omitted checking the return status of the allocation
do ix = 1, num_args
call get_command_argument(ix,args(ix))
! now parse the argument as you wish
end do
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
Nota:
- El segundo argumento de la subrutina
get_command_argument
es una variable de carácter que tendrá que analizar para convertirse en real (o lo que sea). Tenga en cuenta también que he permitido solo 12 caracteres en cada elemento de la matrizargs
, es posible que desee jugar con eso. - Como ya has descubierto,
read
no se usa para leer los argumentos de la línea de comando en los programas de Fortran.
Como quiera leer una matriz de números reales, es mejor que utilice el enfoque que ya ha descifrado, que es leerlos desde la terminal una vez que el programa ha comenzado, depende de usted.