我从csv
文件中获取输入并在tcl中处理它。我一直试图为从csv处理的每10行提供2分钟 时间间隔 。 csv可能包含大约500行。所以它需要一些时间来处理它。下面的代码是我的尝试。我没有任何关于tcl的知识,只是谷歌搜索并尝试但这不起作用。
set fileIn [open "/mydir/Test3.csv" r]
set i 0
while {[gets $fileIn sLine] >= 0} {
incr i
if{$i==10} {
after 120000
set i 0
continue
}
set lsLine [split $sLine ","]
set sType [lindex $lsLine 0]
set sName [lindex $lsLine 2]
set sValue ""
set sCount [lindex $lsLine 3]
set sprice [lindex $lsLine 4]
# My other operations
}
另请告诉我使用after
或sleep
是否更好。
答案 0 :(得分:0)
Tcl中的间距非常重要。你的if语句在if之后需要一个空格。
if{$i==10} {
应该看起来像
if {$i==10} {
由于您希望每2分钟运行一次,因此您需要考虑前10个项目的处理时间。
set fileIn [open "Test3.csv" r]
set i 0
set start_ms [clock milliseconds]
while {[gets $fileIn sLine] >= 0} {
incr i
if {$i==10} {
set now_ms [clock milliseconds]
set timetaken_ms [expr {$start_ms - $now_ms}]
after [expr {120000 - $timetaken_ms}]
set start_ms [clock milliseconds]
set i 0
continue
}
set lsLine [split $sLine ","]
set sType [lindex $lsLine 0]
set sName [lindex $lsLine 2]
set sValue ""
set sCount [lindex $lsLine 3]
set sprice [lindex $lsLine 4]
# My other operations
puts "$sType - $sName - $sValue - $sCount - $sprice"
}