0

您好,我正在尝试在一个名为 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 个不同的脚本,这些脚本将根据输出的需要被调用。

所以例如我有 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;

或者

我有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;
4

1 回答 1

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

然后你需要做任何你想做的事情,把这些碎片重新组合在一起。

于 2012-11-07T11:55:04.653 回答