ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

tcl编程

2022-08-02 15:05:22  阅读:161  来源: 互联网

标签:set puts expr 编程 tcl 字符串 bits


目录

1. 从命令行获取参数(好像并不是很强大)

array set a0 $argv
foreach opt {-i -o} {
    puts "$opt -> $a0($opt)"
}

运行

$ ex.tcl -i abc -o xyz
-i -> abc
-o -> xyz

2. 给proc定义参数(部分命令只在dc或pt中有效)

proc display {args} {
    parse_proc_arguments -args $args my_arg
    return [expr $my_arg(-a) + $my_arg(-b)]
}

define_proc_attribute display -info "process two number" -define_args {
    {-a "the 1st number" a string required}
    {-b "the 2nd number" b string required}
}

display -a 5 -b 6

3. 按行读入文件

set FH [open ../rpt/$file r]
while {[gets $FH line] >= 0} {
    puts $line
}
close $FH

4. 正则匹配

if [regexp {^(\w+)} $line all_match match1] {
    puts $match1
}

5. catch

当运行的命令出现错误时, catch语句返回1

if [catch {open file.txt r} FH] {
    puts "Error: file.txt not opened"
} else {
    puts "open file.txt"
    while {[gets $FH line] >= 0} {
        puts $line
    }
}

6. 非整数运算

set a [expr 100 * double(1)/3] # 返回33.333333333333336%
                               # 如果不使用double, 则只会返回整数部分
                               # [expr 100 * 1/3] 返回33
                               # [expr 1/3 * 100] 返回0
puts "$a%" # 33.333333333333336%

set b [format "%.2f" $a]
puts "$b%" # 33.33% 

7. 四舍五入, 伪随机数

# 四舍五入
set a 2.3
set b [expr round($a)] #注意, 要通过expr调用, 调用时后面要加圆括号
puts $b # 2, 四舍五入2.3变为2

# 生成0~1之间的伪随机小数
set c [expr rand()] # 注意, 要通过expr调用.
puts $c # 0.45033995969519

# 生成0~9之间的伪随机整数
set d [expr round(9*rand())]
puts $d # 5

8. eval和exec

# eval 动态执行tcl语句
set cmd "puts 123"
eval $cmd # 123

# exec 执行unix shell命令(或windows cmd命令)
set a [exec find . -name "run*"]
puts $a # 打印出find命令的标准输出

9. 进制转换

binary用于操作二进制字符串.
包含四个子命令:

binary format: 将普通tcl字符串转换为二进制字符串.
binary scan  : 将二进制字符串转为普通tcl字符串.
binary encode: 将二进制字符串进行编码.
binary decode: 将编码后的二进制字符串进行解码.
# 普通tcl字符串, 内容是16进制的字符
set hex_str FF00CC

# 将普通tcl字符串$hex转为二进制格式,
#    H : 表示待处理的字符串中是16进制字符
#    * : 表示待处理的字符串list长度任意??
set bin_fmt [binary format H* $hex_str]

# 将二进制数据($bin_fmt)转为普通tcl字符串, 存储到变量$bits中
binary scan $bin_fmt B* bits

# 打印$bits
puts $bits ;# 1111111110000000011001100


# 将$bits格式化为特定长度的str, %0*s, 中的*, 表示通过变量指定长度
set width 28
set bits_28 [format "%0*s" $width, $bits]
puts $bits_28 ; 00001111111110000000011001100

#遍历$bits_28
set len [string length $bits_28]
for {set i 0} {$i<=[expr $len-1]} {incr i} {
    set i_str [expr $len-1-$i]
    puts "$i -> [string index $bits_28 $i_str]"
}

# 0 -> 0
# 1 -> 0
# 2 -> 1
# 3 -> 1
# 4 -> 0
# 5 -> 0
# 6 -> 1
# 7 -> 1
# 8 -> 0
# 9 -> 0
# 10 -> 0
# 11 -> 0
# 12 -> 0
# 13 -> 0
# 14 -> 0
# 15 -> 0
# 16 -> 1
# 17 -> 1
# 18 -> 1
# 19 -> 1
# 20 -> 1
# 21 -> 1
# 22 -> 1
# 23 -> 1
# 24 -> 0
# 25 -> 0
# 26 -> 0
# 27 -> 0

标签:set,puts,expr,编程,tcl,字符串,bits
来源: https://www.cnblogs.com/gaiqingfeng/p/15338672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有