Command Line Arguments in Modelica
Command-line arguments are a common way to parameterize execution of programs. For example, runScript("hello.mos") uses runScript and "hello.mos" arguments to execute a Modelica script.
model CommandLineArguments
import Modelica.Utilities.Streams;
import Modelica.Utilities.System;
function main
input String[:] args;
algorithm
// System.getArguments() provides access to command-line arguments.
// Note that the first value in this array is the path to the program,
// and args[2:end] holds the arguments to the program.
args := System.getArguments();
argsWithProg := args;
argsWithoutProg := args[2:end];
// You can get individual args with normal indexing.
arg := if size(args, 1) >= 4 then args[4] else "";
Streams.print(String(argsWithProg));
Streams.print(String(argsWithoutProg));
Streams.print(arg);
end main;
equation
main(System.getArguments());
end CommandLineArguments;To experiment with command-line arguments, you’ll need to use a Modelica tool that supports command-line execution. The exact method may vary depending on your tool, but it might look something like this:
$ omc CommandLineArguments.mo -r=CommandLineArguments a b c d
{"CommandLineArguments.mo","a","b","c","d"}
{"a","b","c","d"}
cIn Modelica, we use the System.getArguments() function to access command-line arguments. The first element is typically the name of the script or model being executed, and the rest are the actual arguments passed.
Note that Modelica doesn’t have a direct equivalent to Go’s os.Args, so we’re using System.getArguments() which is part of the Modelica Standard Library. The exact behavior might differ slightly depending on the Modelica tool you’re using.
Also, Modelica doesn’t have a built-in main() function like many other languages. Instead, we’ve created a main() function within our model and called it in the equation section. This is one way to structure a Modelica program that needs to perform a sequence of operations.
Next, we’ll look at more advanced ways to handle input parameters in Modelica models.