您好我正在尝试在名为Shorthand的程序中使用TCL,这是一个文本宏程序。 无论如何,我试图用它来规定和重新格式化Mac地址。我无法弄清楚在指定的索引整数处拆分字符串的功能。这是我到目前为止所拥有的。
set DirtyMac [sh_set clipboard]
set HalfMac [string map { . "" } $DirtyMac ]
set FullMac [string map { : "" } $HalfMac]
set ParsedMac [string map { " " "" } $FullMac]
if {[string length $ParsedMac] < 12 } {
return "Mac too short";
} elseif {[string length $ParsedMac] > 12 } {
return "Mac too long";
} else {
return [string map { " " "" } $ParsedMac]
}
那就是清除Mac中所有不需要的字符 我一直在尝试
set Mac1 [linsert $ParsedMac 4 .]
return $Mac1;
或
set Mac1 [split [string is index $ParsedMac 4 ] "."]
return $Mac1;
什么都没有用......任何人都可以做的事情都很棒!
好的,我要做的是拿一个Mac地址,如11:22:33:44:55:66或1122.3344.5566或112233445566,输出为3种格式之一。我将最终编写3个不同的脚本,这些脚本将根据输出的需要进行调用。
所以举个例子 我有mac 1122.3344.5566我想把它变成11:22:33:44:55:66
set DirtyMac "1122.3344.5566"
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
scan $ParsedMac "%2s%2s%2s%2s%2s%2s" a b c d e f
set FullMac [join $a $b $c $d $e $f ":"]
return $FullMac;
OR
我有mac 112233445566我想把它变成1122.3344.5566
set DirtyMac "112233445566"
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
scan $ParsedMac "%2s%2s%2s%2s%2s%2s" a b c d e f
set FullMac [join $a $b $c $d $e $f ":"]
return $FullMac;
最后
我有mac 1122.3344.5566 || 11:22:33:44:55:66我想把它变成112233445566
set DirtyMac | Mac Address Input|
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
return $ParsedMac;
答案 0 :(得分:3)
首先,您只需一步即可完成清洁工作:
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]
请注意,我实际上很想使用不同的清洁方法:删除所有非十字符:
set ParsedMac [regsub -all {[^0-9a-fA-F]} $DirtyMac ""]
其次,将该字符串拆分为4个字符的部分(请注意,我假设您先将长度检查放在第一位)实际上最好用scan
完成:
scan $ParsedMac "%4x%4x%4x" a b c
这将提取四个四位十六进制数字并将其转换为数字。或者,您可以将它们扫描为普通字符串:
scan $ParsedMac "%4s%4s%4s" a b c
然后你需要做任何你想做的事情,把这些碎片重新组合在一起。