2014-12-04 21 views
2

在g ++中,我使用了getopt_long來處理命令行選項。 是否有 存在相同的東西?Fortran命令行參數

我希望能夠通過一些Fortran單元測試。

目前我有以下。正如人們可以注意到我正在照顧 獲得關鍵和價值我自己。當使用C++ getopt_long 正在爲我做這個。

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 
+2

從您的評論下面,我可以建議你使_parsing_方面更加明確嗎? – francescalus 2014-12-04 15:07:15

回答

3

當然你可以使用GET_COMMAND_ARGUMENT就像你已經做的那樣,但這是很容易的部分。問題的難點在於根據這些參數字符串用各種數字,邏輯和字符串值填充變量。這是以下內容:

可以使用名稱列表進行簡單的參數分析。只需添加開始和結束標記。雖然它不太靈活,但非常簡單!

A(!很)短谷歌搜索getopt揭示了幾個該庫的Fortran端口(或類似的人,其中包括解析):

http://fortranwiki.org/fortran/show/getopt_long_module

http://www.dominik-epple.de/getoptions/

http://lagrange.mechse.illinois.edu/partmc/partmc-2.4.0/doc/html/getopt_8_f90_source.html

and

http://libsufr.sourceforge.net/doxygen/getopt_8f90_source.html(感謝AstroFloyd)

+0

我沒有得到編譯的第一個選項,第二個選項只有短的選項,第三個不再存在。我爲Fortran創建了一個getopt模塊,它包含libSUFR v0.7.3中的getopt()/ getopt_long()函數:http://libsufr.sourceforge.net/ – AstroFloyd 2017-04-01 15:01:51

+0

更新了第三個,感謝通知。只需要找到一個新版本,但很容易。 – 2017-04-01 15:05:10

6

看看COMMAND_ARGUMENT_COUNTGET_COMMAND_ARGUMENT。例如在gfortran手冊中。它們是標準的Fortran內部函數。

+1

我知道他們。有其他人嗎?當我使用'GET_COMMAND_ARGUMENT'時,我必須自己照顧解析短期和長期選項。 – Zeus 2014-12-04 14:33:10

+0

庫的要點不僅僅是獲取參數字符串,而是解析它們並將值分配給數值和其他變量。 – 2017-03-12 10:35:17