2016-05-27 8 views
2

ARGSキーワードを使用すると、コマンドラインからJuliaスクリプトを呼び出すときに引数を指定できます(Access command line arguments in Julia参照)。これにより、コマンド行呼び出しの各スペースは、ARGS配列内の別個の要素をマークします。これらの要素の1つを、それ自身が任意の長さの配列にしたい場合はどうすればよいですか? ARGSの別々の要素を連結するだけでは、ここでは不適切と思われます。Julia:passコマンドラインからスクリプトに任意の長さの配列

+1

回答は良いですが、別の方法として、配列をテキストファイルに保存することもできます。 csvを既知の場所に配置し、その場所を引数として渡します。それから 'readcsv'をあなたのスクリプトの最初のステップの一つにするだけです。 –

+1

本当に!良い提案。私の場合は、スクリプトの実行方法を定義する小さな配列があります。実際には、Juliaスクリプトを実行するためにさまざまな設定パターンでコマンドライン呼び出しを生成するPythonコードを記述しています。他の状況では、あなたの提案は、特に大規模な配列の場合には、最も有用である可能性があります。ありがとう! –

+0

@ColinTBowersあなたが答えとしてあなたのコメントを追加したら、私はそれをupvoteすることを嬉しく思います。私は他の用途に役立つかもしれないと思うし、私は頻繁に私がSOを検索すると答えとして目に見えるものが見えないことを知っています。 –

答えて

3

ここに2つのキーがあります。

  1. コマンドラインからスクリプトに渡すものはすべて、最初は文字列になります。スクリプト内でeval(parse())を使用して、渡す文字列を目的のオブジェクトのタイプに変換します。
  2. 最初の文字列を正しく定式化してください。これは、渡すArrayの内容に依存します。ここで

スクリプトの例です:

次の端末のコマンドでこれを実行する
println(string("First Arg Passed to Script: ", ARGS[1])) 
println(string("typeof(ARGS[1]) = ", typeof(ARGS[2])))  

println(string("Second Arg Passed to Script: ", ARGS[2])) 
println(string("typeof(ARGS[2]) = ", typeof(ARGS[2])))  

MyArray = eval(parse(ARGS[1]))  

println(string("typeof(MyArray) = ", typeof(MyArray))) 
println(string("length(MyArray) = ", length(MyArray))) 
println(string("MyArray = ", MyArray)) 

julia /Users/aireties/Desktop/ArrayTest.jl "[2, 4, 5]" 23 

は出力が得られます。

First Arg Passed to Script: [2, 4, 5] 
typeof(ARGS[1]) = UTF8String 
Second Arg Passed to Script: 23 
typeof(ARGS[2]) = UTF8String 
typeof(MyArray) = Array{Int64,1} 
length(MyArray) = 3 
MyArray = [2,4,5] 

:しかし、 、私が望むならば

julia /Users/aireties/Desktop/ArrayTest.jl '["a", "b", 5]' 23 

の呼び出し:私は、コマンドラインから渡す配列内の文字列は、私はジュリアが文字列を示すために使用し、ダブルクォーテーションでアレイを包む、引用の第二、単一のセットを使用する必要が含まれます:

julia /Users/aireties/Desktop/ArrayTest.jl "["a", "b", 5]" 23 

エラーが発生します。

2

@airetiesが提供する答えは良いです。しかし、入力配列が大きい場合に特にうまく機能する別のオプションを提供すると思いました。入力された配列をテキストファイルに保存するだけです。 /someAbsolutePath/myArray.csvを呼び出し、juliaを呼び出すときにテキストファイルの場所を引数として渡します。その後、スクリプトの最初の数行で、readcsvと呼んでください。

これは、多くの入力を必要とするコマンドラインからルーチンを呼び出す場合、Julia(Python/R/Matlabなど)のような多くの言語ではかなり一般的な方法です。本番環境でコンパイルされたMatlabルーチンが、カスタムテキストファイルの場所をコマンドラインで単一の入力引数として受け取ることがわかりました。 Matlabルーチンの最初のセクションでは、カスタムテキストファイルからの入力引数のホスト全体を読み込みます(テキストファイルが期待通りに表示されない場合はエラーをスローします)。場合によっては、テキストファイルには、他の関連する入力を含む多くの他のテキストファイルの場所が含まれます。

関連する問題