求编写用于计算时长的Tcl脚本示例实现
Tcl时长计算脚本实现
核心命令实现
先实现需求中的assign、getVar和calc_duration三个命令,用全局数组存储变量,通过正则解析时长单位并转换为秒:
# 全局数组用来存储变量 array set ::vars {} # 实现assign命令:保存变量名和对应的时长值 proc assign {var value} { set ::vars($var) $value } # 实现getVar命令:读取已存储的变量值 proc getVar {var} { return $::vars($var) } # 实现calc_duration命令:解析时长表达式,计算总秒数 proc calc_duration {expr} { # 拆分表达式里的+运算符,处理空格 set terms [split [string map {"+" " + "} $expr] "+"] set total_seconds 0 foreach term $terms { set term [string trim $term] # 匹配数字+单位的格式(比如5.hours) if {[regexp {^(\d+)\.(hours|minutes|seconds)$} $term -> num unit]} { switch $unit { hours { incr total_seconds [expr {$num * 3600}] } minutes { incr total_seconds [expr {$num * 60}] } seconds { incr total_seconds $num } } } else { error "无效的时长格式:$term" } } return $total_seconds }
测试示例代码
运行你提供的示例代码,就能得到预期结果:
assign duration1 5.hours assign duration2 4.minutes assign duration3 10.seconds assign seconds [calc_duration [getVar duration1] + [getVar duration2] + [getVar duration3]] puts $seconds ;# 输出:18250
说明
assign通过全局数组::vars保存变量,支持自定义变量名和时长值;calc_duration支持多个时长项用+拼接的表达式,自动把小时、分钟转换为秒后累加;- 正则匹配只处理
数字.hours/数字.minutes/数字.seconds格式的时长值,非法格式会直接抛出错误。
内容的提问来源于stack exchange,提问作者pedro
相关产品推荐
相关产品推荐

