argopt 包
介绍
argopt 包主要用于帮助解析命令行参数。
主要接口
class ArgOpt
public class ArgOpt {
public init(shortArgFormat: String)
public init(longArgList: Array<String>)
public init(shortArgFormat: String, longArgList: Array<String>)
public init(args: Array<String>, shortArgFormat: String, longArgList: Array<String>)
}
ArgOpt 类主要用于帮助解析命令行参数(包括参数的特殊含义,如形式为 "-" 和 "--"),该类使用了 String 类和 Char 类的一些函数来辅助实现,提供了一组针对命令行参数字符串或数组的解析函数。
一个命令行参数是由前缀符号、参数名、参数值组成,其中 "-" 表示短参(短命令行参数)的前缀,"--" 表示长参(长命令行参数)的前缀。 可解析的短参参数名只能是字母,可解析长参参数名字符串需满足:以字母开头,字符串中不能包含 "="。
对于以下函数中短参名字符串,和长参名字符串数组入参,需要注意以下几点:
- 短参名字符串的入参,格式为:"a:",规范为:一位字母和 ":" 的组合,例如:"ab:",该例仅解析 b 作为短参名。
- 长参名字符串数组入参,字符串格式为:"--testA=" 或 "testA=",规范为:"--" + 长参参数名 + "="(前缀"--"可省略)。
- 其它情况会可造成不解析或者异常。
init
public init(shortArgFormat: String)
功能:构造 ArgOpt 实例,并从短参名字符串中解析短参名。
参数:
- shortArgFormat:包含短参名的字符串
异常:
- IllegalArgumentException:短参名字符串不符合规范
init
public init(longArgList: Array<String>)
功能:构造 ArgOpt 实例,并从列表的字符串中解析长参名。
参数:
- longArgList:包含长参名的字符串数组
异常:
- IllegalArgumentException:字符串数组中的长参名字符串不符合规范
init
public init(shortArgFormat: String, longArgList: Array<String>)
功能:构造 ArgOpt 实例,并从短参名字符串中解析短参名、从列表的字符串中解析长参名。
参数:
- shortArgFormat:包含短参名的字符串
- longArgList:包含长参名的字符串数组
异常:
- IllegalArgumentException:短参名字符串不符合规范,或字符串数组中的长参名字符串不符合规范
init
public init(args: Array<String>, shortArgFormat: String, longArgList: Array<String>)
功能:构造 ArgOpt 实例,并从短参名字符串中解析短参名、从列表的字符串中解析长参名,若解析成功,则依据解析出的参数名从参数 args
指定的命令行参数中解析参数名的对应取值。
参数:
- args:待解析的命令行参数字符串数组
- shortArgFormat:包含短参名的字符串
- longArgList:包含长参名的字符串数组
异常:
- IllegalArgumentException:短参名字符串不符合规范,或字符串数组中的长参名字符串不符合规范
func getArg
public func getArg(arg: String): Option<String>
功能:返回入参 arg 指定参数的解析值。
参数:
- arg:前缀和参数名组成的字符串(可省略前缀)
返回值:参数解析值
func getUnparseArgs
public func getUnparseArgs(): Array<String>
功能:返回没有被解析的字符串集合。
返回值:存放没有被解析的字符串的数组
func getArgumentsMap
public func getArgumentsMap(): HashMap<String, String>
功能:获取所有已解析的参数名和取值,参数名包含前缀符号。
返回值:存放解析出键值对的哈希表
示例
ArgOpt 构造异常
抛异常示例。
代码如下:
from std import argopt.*
main() {
/* IllegalArgumentException: Invalid character string: please check */
let arg: String = "ab:-~"
try {
/* the parameter: ab:-~ */
let ao: ArgOpt = ArgOpt(arg)
let p: Option<String> = ao.getArg("-b")
match (p) {
case Some(v) => println(v)
case _ => println("NONE")
}
} catch (e: Exception) {
print(e.toString())
}
return 0
}
运行结果如下:
IllegalArgumentException: Invalid string, please check the parameter: ab:-~
ArgOpt 构造成功
构造成功示例。
代码如下:
from std import argopt.*
main() {
var a: Array<String> = Array<String>(["-a123", "-bofo", "-cfoo", "-d789",
"bar","--condition=foo", "--testing=456",
"--output-file", "--abc.def","-p","-k123","bbb","a1", "a2"])
let lof: Array<String> = Array<String>(["condition=", "output-file=", "testing", "testing"])
let str: String = "ab:c:d:k:u:x"
let ao: ArgOpt = ArgOpt(a, str, lof)
a = ao.getUnparseArgs()
let p: Option<String> = ao.getArg("-b")
match (p) {
case Some(v) => println(v)
case _ => println("NONE")
}
0
}
运行结果如下:
ofo
未解析参数
未解析参数示例。
代码如下:
from std import argopt.*
main() {
var a: Array<String> = Array<String>(["-a123", "-bofo", "-cfoo", "-d789",
"bar","--condition=foo", "--testing=456",
"--output-file", "--abc.def", "-p", "-k123", "bbb", "a1", "a2"])
let lof: Array<String> = Array<String>(["condition=", "output-file=", "testing", "testing"])
let str: String = "ab:c:d:k:u:x"
let ao: ArgOpt = ArgOpt(a, str, lof)
a = ao.getUnparseArgs()
for (i in 0..a.size) {
print("${a[i]},")
}
0
}
运行结果如下:
-a123,bar,--testing=456,-p,bbb,a1,a2,
成功解析参数
成功解析参数示例。
代码如下:
from std import argopt.*
from std import collection.*
main() {
let args: Array<String> = Array<String>(["-a123", "-bofo", "-cfoo", "-d789", "bar",
"--condition=foo", "--testing=456", "--output-file",
"abc.def", "-p", "-k123", "bbb", "a1", "a2"])
let longArgList: Array<String> = Array<String>(["condition=", "output-file=", "testing", "testing"])
let str: String = "a:b:c:d:e"
let ao: ArgOpt = ArgOpt(args, str, longArgList)
let map: HashMap<String, String> = ao.getArgumentsMap()
let value: Option<String> = map.get("--output-file")
match (value) {
/* abc.def */
case Some(v) => println(v)
case _ => print("NOPASS")
}
0
}
运行结果如下:
abc.def