In komplexeren Anwendungen ist es üblich Parameter dem Programm beim Start zu übermitteln. Dh. es muss nicht während des Programmlaufs gestoppt werden, um eine Nutzereingabe zu erhalten, sondern die Parameter können beim Programmstart als Kommandozeilenparameter angegeben werden, die dann während des Programmlaufs interpretiert werden.
Zur Abfrage der Anzahl (siehe in C: Variable argc
) steht die Funktion COMMAND_ARGUMENT_COUNT
ab dem Fortran-Standard 2003 zur Verfügung. Die Funktion nimmt keine Parameter und gibt die Anzahl der Parameter als Integer zurück, die nicht der Name des Programms sind.
Nun haben wir die Anzahl der Parameter, dann benötigen wir nurnoch die Parameter selbst. Dazu können wir die Subroutine GET_COMMAND_ARGUMENT
verwenden:
GET_COMMAND_ARGUMENT (number, value[, length, status)
value
nicht den kompletten String aufnehmen konnte -1; ansonsten (bei Erfolg) 0
Ist number
auf 0 gesetzt, erhalten Sie den Programmnamen zurück, ist number
größer als die Anzahl der Argumente, wird value
mit Leerzeichen gefüllt. Ist der Wert des Parameters länger als value
, dann wird value
soweit gefüllt, wie der Speicherplatz es zulässt (alles andere wird abgeschnitten).
program main implicit none integer argc, n, m real p CHARACTER argv*32 argc = COMMAND_ARGUMENT_COUNT() call GET_COMMAND_ARGUMENT ( 0, argv ) if (argc<3) then write (*,*) "Benutzung: ", trim(argv), " n m p" stop endif call GET_COMMAND_ARGUMENT ( 1, argv ) read (argv, *) n call GET_COMMAND_ARGUMENT ( 2, argv ) read (argv, *) m call GET_COMMAND_ARGUMENT ( 3, argv ) read (argv, *) p write (*,*) n,m,p end program
Ausgaben:
$ gfortran cmd.f90 $ ./a.out Benutzung: ./a.out n m p $ ./a.out 1 2 3 1 2 3.0000000
Ähnlich wie GET_COMMAND_ARGUMENT
steht die Subroutine GET_ENVIRONMENT_VARIABLE
ab Fortran 2003 zur Verfügung:
GET_ENVIRONMENT_VARIABLE ( name, value [, length, status, trim_name] )
Die Verwendung ist analog zu GET_COMMAND_ARGUMENT
mit der Ausnahme, dass Umgebungsvariablen Namen (Strings) haben, die mit dem ersten Parameter angegeben werden sollen. Außerdem gibt trim_name
an, ob in dem Namen-Parameter die abschließenden Leerzeichen zum Namen gehören (trim_name=.FALSE.
) oder ob sie keine Bedeutung gehören und damit abgeschnitten werden (trim_name=.TRUE.
)