Command line Fortran命令行参数

Command line Fortran命令行参数,command-line,fortran,Command Line,Fortran,在g++中,我使用getopt_long来处理命令行选项。有吗 存在同样的东西吗 我希望能够通过一些Fortran单元测试 目前我有以下几点。大家可以注意到,我很小心 获得关键并重视自己。当使用C++ GETOPTTYLY 是为我做的 i = 1 Do Call Get_command_argument (i, arg) If (Len_trim (arg) == 0) Exit pos = Index (arg, "=") !!$ Long option argument. If (a

在g++中,我使用
getopt_long
来处理命令行选项。有吗 存在同样的东西吗

我希望能够通过一些Fortran单元测试

目前我有以下几点。大家可以注意到,我很小心 获得关键并重视自己。当使用C++ GETOPTTYLY 是为我做的

i = 1

Do

Call Get_command_argument (i, arg)
If (Len_trim (arg) == 0) Exit

pos = Index (arg, "=")

!!$ Long option argument.
If (arg(1:2) == "--") Then
  If (pos == 0) Then
    c = arg
    val = ""
  Else
    c = arg(:pos-1)
    val = arg(pos+1:)
  End If

!!$ Short option argument.
Elseif (arg(1:1) == "-") Then
  c = arg
  val = arg(pos+1:)

!!$ Non option argument.
Else
  c = arg
  val = arg

End If

!!$------------------------------------------------------------ 

Select Case (c)

  Case ("-b","--brief")
    arg_brief = .True.

  Case ("-h","--help")
    arg_help = .True.

  Case ("-v","-V","--version")
    arg_version = .True.

  ! Output model geographical definition
  Case ("-cunit")
    arg_cunit = val

  Case default
    arg_nonopt = Trim (Adjustl (arg))
    Write (*,*) "Warning: Non option argument"

End Select

i = i + 1

End Do

!!$-------------------------------------------------------------

!!$ [TODO] Get numbers from arg_cunit

If (arg_cunit .contains. "-") Then

  If (arg_cunit .contains. ",") Then
    !!$ "-" and "," are present.

  Else
    !!$ "-" only are present. 

  End If

Else If (arg_cunit .contains. ",") Then
  !!$ "," only are present

End If 

查看
COMMAND\u ARGUMENT\u COUNT
GET\u COMMAND\u ARGUMENT
。e、 g.,在gfortran手册中。它们是标准的Fortran内部语言。

当然,您可以像以前一样使用
GET\u COMMAND\u ARGUMENT
,但这是最简单的部分。问题的难点在于根据这些参数字符串用各种数字、逻辑和字符串值填充变量。这就是以下内容的作用:

可以使用名称列表进行简单的参数解析。只需添加开始和结束标记。虽然不太灵活,但非常简单

通过(非常!)短的google搜索
getopt
可以发现该库的几个Fortran端口(或包含解析的类似端口):


(多亏了阿斯托弗洛伊德)

我知道他们。还有其他的吗?当我使用
GET_COMMAND_ARGUMENT
时,我必须自己处理长短选项。库的作用不仅仅是获取参数字符串,而是解析它们并将值分配给数值和其他变量。从下面的评论中,我可以建议您将解析方面做得更明确一些吗?我没有得到要编译的第一个选项,第二个选项只有短选项,第三个选项不再存在。我为Fortran创建了一个getopt模块,其中包含libSUFR v0.7.3中的getopt()/getopt_long()-函数:更新了第三个,感谢您的通知。只是需要找到一个新版本,但很容易。