2016-08-12 4 views
0

Wie speichert man Befehlszeilenargumente in einem Array in tcl?So speichern Sie eine Befehlszeilenargumente in einem Array

Ich versuche, Befehlszeilenargumente (argv) in einem Array zu speichern. Ist argv nicht Array? Ich habe den folgenden Code ausprobiert, funktioniert aber nicht für mich.

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

In Tcl Begriffen, argv ist eine Liste kein Array, so würden Sie lindex verwenden, um seine Elemente und llength Zugang zu finde seine Größe. –

+0

Beachten Sie, dass in Tcl das Wort "Array" Array in anderen Sprachen nicht bedeutet. Sind Sie sicher, dass Sie ein Array und keine Liste möchten? Selbst wenn Sie sicher sind, dass Sie eine Schlüssel-> Wert-Paar-Datenstruktur haben wollen, sind Sie sicher, dass Sie ein Array und kein Diktat wollen? – slebetman

Antwort

3

Tcl argv global ist eine Liste, kein Array, weil um Angelegenheiten und Listen sind ein ganz vernünftiger Weg, um die Argumente zu tun. Deshalb verwenden Sie lindex (und andere Listenoperationen) damit. Sie können in ein Array konvertieren, aber der meiste Code wird dadurch "überrascht". Als solches ist es besser, einen anderen Array-Namen für die („arguments“ weiter unten) zu verwenden:

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)" 
Verwandte Themen