====== Abfrage von Kommandozeilenparameter ====== 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. ===== Abfrage der Anzahl an Kommandozeilenparameter ===== 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. ===== Abfrage einzelner Parameter ===== 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) ==== Parameter ==== * **number** gibt an, welcher Parameter abgefragt werden soll * **value** ist ein String, welcher den Wert des Parameters aufnehmen soll * **length** gibt nach dem Unterprogrammruf die Länge des Parameters an * **status** falls etwas schief läuft, >0; falls ''value'' nicht den kompletten String aufnehmen konnte -1; ansonsten (bei Erfolg) 0 ==== Hinweise ==== 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). ===== Beispiel ===== 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 ===== Abfrage von Umgebungsvariablen ===== Ä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.'')