我怎麼能發送這個值參數使用NS2
24.215729
24.815729
25.055134
27.123499
27.159186
28.843474
28.877798
28.877798
到TCL輸入參數?你知道我們不能使用管道命令,因爲tcl dosent以這種方式接受! 我能做些什麼來存儲這個數字在tcl文件中(這個數字的數量在變量中,可以是0到N,在這個例子中是7)
我怎麼能發送這個值參數使用NS2
24.215729
24.815729
25.055134
27.123499
27.159186
28.843474
28.877798
28.877798
到TCL輸入參數?你知道我們不能使用管道命令,因爲tcl dosent以這種方式接受! 我能做些什麼來存儲這個數字在tcl文件中(這個數字的數量在變量中,可以是0到N,在這個例子中是7)
這是很容易做在bash中,轉儲清單值到一個文件,然後運行:
tclsh myscript.tcl $(< datafilename)
然後該值在腳本訪問與參數變量:
puts $argc; # This is a count of all values
puts $argv; # This is a list containing all the arguments
您可以閱讀管道輸送到stdin
與命令一樣
set data [gets stdin]
或臨時文件,如果你喜歡。例如,以下程序的第一部分(來自wiki.tcl.tk的示例)從文件讀取一些數據,然後另一部分從stdin
讀取數據。爲了測試它,把代碼放到一個文件(例如:reading.tcl
),使其可執行文件,創建一個小文件somefile
,並執行經例如
./reading.tcl < somefile
#!/usr/bin/tclsh
# Slurp up a data file
set fsize [file size "somefile"]
set fp [open "somefile" r]
set data [read $fp $fsize]
close $fp
puts "Here is file contents:"
puts $data
puts "\nHere is from stdin:"
set momo [read stdin $fsize]
puts $momo
編碼,當我使用的技術是把數據在我的腳本,文字:
set values {
24.215729
24.815729
25.055134
27.123499
27.159186
28.843474
28.877798
28.877798
}
現在我可以只給它們放入一個命令一次一個與foreach
,或送他們作爲一個參數:
# One argument
TheCommand $values
# Iterating
foreach v $values {
TheCommand $v
}
一旦你得到了你的代碼與文字工作,切換它從文件中提取數據是非常簡單的。您只需更換文字的代碼讀取文件:
set f [open "the/data.txt"]
set values [read $f]
close $f
您也可以從標準輸入提取數據:
set values [read stdin]
如果有很多的值(大於,比如說,10-20MB ),那麼你一次處理一行數據可能會更好。以下是如何做到這一點從標準輸入讀取...
while {[gets stdin v] >= 0} {
TheCommand $v
}
僅僅是明確的,'gets'讀取一行,並刪除其後的換行符(所以變量名'data'是有點誤導)和'read'讀取一堆字符(包括換行符)。 –
@glenn,對於演示的目的,我沒有提到這些要點。還要注意,'[read stdin $ fsize]'會從標準輸入讀取至多$ fsize字符(即,如果EOF出現在許多之前,則讀取更少),並且$ fsize很可能與標準輸入中出現的任何內容無關。 –
如果您要閱讀所有內容,只需閱讀$ channel; Tcl的緩衝區管理很好。 –