NW機器のコンフィグをミスなく設定するのはなかなか注意力のいる作業ですよね。
作成したコンフィグがあっているかプログラムで解析できれば、という場面もあるかと思います。
そんな場面で役立てたら・・・という記事になります。
NW機器ではコンフィグに
「1/0/1-4,1/0/5,1/0/10-24」のように
「ハイフンで範囲を指定した表記」で設定が行われているかと思います。
この「範囲の解釈」を行う汎用的な関数(VBA)を作成しましたので
公開したいと思います。
※ひとまずの公開となります。
作り込みができておらずやや雑な処理になっておりますので
今後フォローアップできればと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
'------------------------------------------------------------------------------ ' @brief 「1/0/1-2,4」といった文字列をF,T,T,F,T,....の配列にして返す。 ' 2/0/1や1/1/1に対応するにはReplace関数を追加すること。 ' @param rangeStr[in] 処理したい文字列を渡す(例)1/0/1-2,4 ' @param rangeFlg[out] rangeStrを解釈し、boolの配列にして返す。 ' (例)1/0/1-2,4を渡すと 配列添字0から順に「F,T,T,F,T,F,F,F...」となる。 ' 添字0 は 1/0/0 の内容を指す点に注意 '------------------------------------------------------------------------------ Function GetRangeFlg(rangeStr As String) As Boolean() Dim rangeFlg(128) As Boolean Dim rangeStrs() As String Dim tmp As String tmp = Replace(rangeStr, "po", "") rangeStr = Replace(tmp, "1/0/", "") rangeStrs = Split(rangeStr, ",") Dim cnt As Integer For cnt = 0 To UBound(rangeFlg) - 1 rangeFlg(cnt) = False Next If rangeStr = "-" Then GetRangeFlg = rangeFlg Exit Function End If Dim s As Variant For Each s In rangeStrs If InStr(s, "-") <> 0 Then Dim ss() As String ss = Split(s, "-") Dim head As Integer Dim tail As Integer head = CInt(ss(0)) tail = CInt(ss(1)) Dim i As Integer For i = head To tail rangeFlg(i) = True Next Else rangeFlg(CInt(s)) = True End If Next GetRangeFlg = rangeFlg End Function |