在tcl中处理的每10个对象的Sleep命令

时间:2015-10-19 09:12:41

标签: csv tcl

我从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
}

另请告诉我使用aftersleep是否更好。

1 个答案:

答案 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"
}