在 Julia 中,我可以创建二维数组
[1 2 3 4 ; 5 6 7 8]
2×4 Array{Int64,2}:
1 2 3 4
5 6 7 8
Run Code Online (Sandbox Code Playgroud)
问题是,我需要解析作为脚本参数提供的二维数组 - 即作为字符串。
例如
$ julia script.jl "[1 2 3 4 ; 5 6 7 8]"
Run Code Online (Sandbox Code Playgroud)
并在脚本中类似:
c = parse.(ARGS[1])
Run Code Online (Sandbox Code Playgroud)
并且 c 应该是一个 2×4 的数组。
我对输入字符串的格式很灵活。
用例是,我想从 Java 内部调用在 Julia + JuMP 中实现的优化问题。
查看该readdlm函数,该函数将允许您解析ARGS作为数组接收的文本:
using DelimitedFiles
a = readdlm(IOBuffer(ARGS[1]),',',';')
display(a)
Run Code Online (Sandbox Code Playgroud)
跑步:
$ julia argscript.jl "1,2,3,4;5,6,7,8"
2×4 Array{Float64,2}:
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
Run Code Online (Sandbox Code Playgroud)
您可以在脚本中强制使用数组元素类型:
a = readdlm(IOBuffer(ARGS[1]),',',Int,';')
Run Code Online (Sandbox Code Playgroud)
您甚至可以通过传递另外两个参数来强制矩阵维度:
using DelimitedFiles
n = parse(Int,ARGS[1])
m = parse(Int,ARGS[2])
a = readdlm(IOBuffer(ARGS[3]),',',Int,';',dims=(n,m))
Run Code Online (Sandbox Code Playgroud)
跑步:
$ julia argscript.jl 2 3 "3,2,1;2,6,8"
2×3 Array{Int64,2}:
3 2 1
2 6 8
$ julia argscript.jl 2 4 "3,2,1;2,6,8"
ERROR: LoadError: at row 2, column 1 : ErrorException("missing value at row 1 column 4"))
Run Code Online (Sandbox Code Playgroud)