はじめてのJScript+WSH 番外2 アドレスの各オクテットを0埋めする変換

はじめに

Cisco機のshow ip routeの結果や、show run内のip routeコマンドなどIPアドレス順になります。この順番にするために必要な仕込み処理のためアドレスの各オクテットを0埋めします。

IPアドレス順とは

各オクテット毎に数値で比較しているようです。
例)
 10.20.1.0/24
 10.20.2.0/24
 10.20.10.0/24
 10.100.1.0/24

上記のセグメントを文字列をしてソートすると下記のようになってしまいます。(プログラミングやエクセルでソートするとこうなります)
例)
 10.100.1.0/24
 10.20.1.0/24
 10.20.10.0/24
 10.20.2.0/24


オクテット毎に比較してソートするには

ソート前が下記だとすると
 10.100.1.0/24
 10.20.1.0/24
 10.20.10.0/24
 10.20.2.0/24
各オクテットを0埋めします
 010.100.001.000/24
 010.020.001.000/24
 010.020.010.000/24
 010.020.002.000/24
これを文字列順でソートします
 010.020.001.000/24
 010.020.002.000/24
 010.020.010.000/24
 010.100.001.000/24
あとは何らかの方法で元に戻します
 10.20.1.0/24
 10.20.2.0/24
 10.20.10.0/24
 10.100.1.0/24

各オクテットを0埋めする関数

オクテットがの左に0を2つつけて、右から3文字を抽出します。
例)192 → 00192 → 192
  16 → 0016 → 016
  1 → 001 → 001

// IPアドレスの各オクテットを0埋めして返す関数
// 例)10.1.10.100 => 010.001.010.100
//     IPアドレス以外は"000.000.000.000"を返す
var zeroPaddingAddress = function(str){

    if( str.search(/(\d+\.\d+\.\d+\.\d+)|(\d+\.\d+\.\d+\.\d+)\/\d+/) > -1 ){

        var arr = str.match(/(\d+\.\d+\.\d+\.\d+)|(\d+\.\d+\.\d+\.\d+)\/\d+/);
        arr = arr[1].split(".");
        return  ("00"+arr[0]).slice(-3)+"."
               +("00"+arr[1]).slice(-3)+"."
               +("00"+arr[2]).slice(-3)+"."
               +("00"+arr[3]).slice(-3);
    }else{
        return "000.000.000.000";
    }
}

WScript.echo(zeroPaddingAddress("192.168.1.0"));   // => 192.168.001.000
WScript.echo(zeroPaddingAddress("172.16.20.64/26"));// => 172.016.020.064
WScript.echo(zeroPaddingAddress("10.1.10.100/32")); // => 010.001.010.100
WScript.echo(zeroPaddingAddress("show ip route"));  // => 000.000.000.000

おわりに

次の記事でソート部分を書きます。

この記事が気に入ったらサポートをしてみませんか?