在tcl中获取FileName和时间

时间:2015-11-03 05:37:35

标签: tcl

我在这里有两个问题。

1)我正在尝试打印我提供的文件名作为输入。但它提供了一些随机值。

set fileIn [open "[ pwd ]/Test - 2.csv" r]
puts "File Name : [file tail $fileIn]"

输出

File Name : file1d2d0a00

我知道我可以使用[file tail "[ pwd ]/Test - 2.csv"]。但我可以从 fileIn 吗?

2)我正在尝试获取运行脚本所需的总时间。我正在使用以下方法。它以毫秒为单位给我。我怎样才能在几分钟内得到它?

set start_time [clock clicks -milliseconds]
{
# my operations
}
set time_taken [expr [clock clicks -milliseconds] - $start_time]
puts $time_taken

除了使用数学运算进行转换之外,是否有任何内部方法(或其他格式)可以在几分钟内获得时间?

1 个答案:

答案 0 :(得分:1)

问题1:

由于您使用open命令来读取文件,因此它返回的值只是文件指针。即文件操作的参考。为了获得您使用的文件名,如下所示,

set fileName "[pwd ]/Test - 2.csv"
puts "File Name : [file tail $fileName]";
# The variable 'fileIn' is the file pointer.
# You should use the same for further file operations.
set fileIn [open $fileName r]

问题2:

要将毫秒转换为分钟,您只需将结果除以60000。

set start_time [clock clicks -milliseconds]
# Your actions here
after 1000; # I just used 'after' command to sleep for 1s 
set time_taken [expr [clock clicks -milliseconds] - $start_time]
puts "time taken in milliseconds : $time_taken"
puts "time taken in seconds : [expr {[format "%#.10g" $time_taken]/1000}]"
puts "time taken in mins : [expr {[format "%#.10g" $time_taken]/60000}]"

输出

time taken in milliseconds : 1011
time taken in seconds : 1.011
time taken in mins : 0.01685

或者,您可以使用[clock seconds]以秒为单位获取时间并将其除以60以在几分钟内得到它。