2016-08-12 4 views
0

コマンドライン引数をtclの配列に格納する方法は?コマンドライン引数を配列に格納する方法

私はコマンドライン引数(argv)を配列に格納しようとしています。 argvは配列ではありませんか?私は次のコードを試しましたが、私のためには動作しません。

proc auto args { 
    global argv 
    set ifname [lindex $argv 0] 
    puts "***********$ifname" 
    puts "$argv(2)" 
    for { set index 1} { $index < [array size argv ] } { incr index } { 
     puts "argv($index) : $argv($index)" 
    } 
} 
#Calling Script with arguments 
auto {*}$argv 
+0

、argvが、リストではない配列でありますそのサイズを見つける。 –

+0

tclでは、 'array'という単語は他の言語では配列を意味しないことに注意してください。リストではなく配列を使用してもよろしいですか?キーと値のペアのデータ構造が必要な場合でも、配列は必要ですか? – slebetman

答えて

3

注文事項とリストが引数を行うための、完全に合理的な方法であるため、Tclのargvグローバルは、リスト、配列ではありません。そのため、lindex(および他のリスト操作)を使用しています。配列に変換することはできますが、ほとんどのコードはそれによって "驚いた"ものになります。このように、それは(「arguments」以下)、そのために別の配列名を使用することをお勧めします:あなたがその要素とllengthにアクセスするためにLINDEXを使用するように、Tclの用語で

proc argumentsToArray {} { 
    global argv arguments 
    set idx 0 
    unset -nocomplain arguments; # Just in case there was a defined variable before 
    array set arguments {};  # Just in case there are no arguments at all 
    foreach arg $argv { 
     set arguments($idx) $arg 
     incr idx 
    } 
} 

argumentsToArray 
puts "First argument was $argument(0) and second was $argument(1)" 
関連する問題