在 tcl 中获取文件名和时间

Getting FileName and time taken in 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

除了用数学运算转换外,有没有什么inbuild方法(或其他格式)可以得到分钟的时间?

问题 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]

问题二:

要将毫秒转换为分钟,只需将结果除以 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 得到以分钟为单位的时间。