在Julia中解析二维数组

在Julia中解析二维数组,julia,Julia,在Julia中,我可以使用 [1 2 3 4 ; 5 6 7 8] 2×4 Array{Int64,2}: 1 2 3 4 5 6 7 8 问题是,我需要解析作为脚本参数提供的2D数组,即字符串 比如说 $ julia script.jl "[1 2 3 4 ; 5 6 7 8]" 在脚本中,类似于: c = parse.(ARGS[1]) c应该是一个2×4的数组 我对输入字符串的格式很灵活 用例是,我想从Java中调用Julia+JuMP实现的优化问题 检查该函数,它将允许

在Julia中,我可以使用

[1 2 3 4 ; 5 6 7 8]
2×4 Array{Int64,2}:
1  2  3  4
5  6  7  8
问题是,我需要解析作为脚本参数提供的2D数组,即字符串

比如说

$ julia script.jl "[1 2 3 4 ; 5 6 7 8]"
在脚本中,类似于:

c = parse.(ARGS[1])
c应该是一个2×4的数组

我对输入字符串的格式很灵活

用例是,我想从Java中调用Julia+JuMP实现的优化问题

检查该函数,它将允许您将从
ARGS
接收的文本作为数组进行解析:

using DelimitedFiles
a = readdlm(IOBuffer(ARGS[1]),',',';')
display(a)
运行:

$ 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
$ 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"))
可以强制脚本中的数组元素类型:

a = readdlm(IOBuffer(ARGS[1]),',',Int,';')
您甚至可以通过再传递两个参数来强制执行矩阵维度:

using DelimitedFiles
n = parse(Int,ARGS[1])
m = parse(Int,ARGS[2])
a = readdlm(IOBuffer(ARGS[3]),',',Int,';',dims=(n,m))
运行:

$ 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
$ 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"))

你的意思是
c=eval(parse(ARGS[1]))
。。。但不确定这是做这样一件事的最佳方法。另外,看看哪一种方法解决了类似的问题(参考使用
eval
)也许有必要告诉我们您正试图通过这件事实现什么,只是为了确保这不是一个类似的问题。例如,你的问题可以很容易地解决,如果你想留在REPL中,可以这样做
julia-E“c=[1 2 3 4;2 3 4 5];include(\“script.jl\”)
(或者
-ie
,而不是
-E
)(不是说这样更安全,而是…)