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;

何も機能していません...誰かが助けるためにできることは何でも素晴らしいでしょう!

さて、私がやろうとしているのは、11:22:33:44:55:66、1122.3344.5566、112233445566などのMacアドレスを取得し、これら3つの形式のいずれかで出力することです。最終的に、出力の必要性に基づいて呼び出される3つの異なるスクリプトを作成します。

たとえば、私はMac1122.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;

また

私はマックを持っています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;

最後に

私はマック1122.3344.5566を持っています|| 11:22:33:44:55:66112233445566に変えたい

set DirtyMac | Mac Address Input|
set ParsedMac [string map {. "" : "" " " ""} $DirtyMac] 
return $ParsedMac;
4

1 に答える 1

3

まず、1つのステップとしてクリーニングを実行できます。

set ParsedMac [string map {. "" : "" " " ""} $DirtyMac]

念のために言っておきますが、私は実際には別のクリーニング方法を使用したいと思うでしょう。16進数以外の文字をすべて削除することです。

set ParsedMac [regsub -all {[^0-9a-fA-F]} $DirtyMac ""]

次に、その文字列を4文字に分割する(長さのチェックを最初に入れると仮定していることに注意してください)のは、実際には次の方法で行うのが最適scanです。

scan $ParsedMac "%4x%4x%4x" a b c

これにより、4つの16進数文字が抽出され、数値に変換されます。または、通常の文字列としてスキャンすることもできます。

scan $ParsedMac "%4s%4s%4s" a b c

次に、ピースを元に戻すことで、探していることは何でもする必要があります。

于 2012-11-07T11:55:04.653 に答える