はじめてのJScript+WSH 番外3 2次元配列のソート
はじめに
Cisco機のshow ip routeの結果や、show run内のip routeコマンドなどIPアドレス順になります。この順番にするためにソートをできるようにします。
※下記記事の続きです
二次元配列をソートする
要素の1つ目をソート用の文字列にすればソートされるようです。
また下記コードのソート前の二次元配列(arr2)は下記のようになっています。
arr2=[
[192.168.001.000, 192.168.1.0],
[172.016.020.064, 172.16.20.64/26],
[010.001.010.100, 10.1.10.100/32],
[000.000.000.000, show ip route],
];
// 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";
}
}
// ソート前の配列
var arr = [
"192.168.1.0",
"172.16.20.64/26",
"10.1.10.100/32",
"show ip route"
];
// 配列を2次元配列に格納する。
// 1つ目の要素はソート用、2つ目の要素は元の文字列とする。
// 例) arr[i] => "10.1.10.100"
// arr2[i] => ["010.001.010.100", "10.1.10.100"]
var arr2 = [];
for(var i = 0; i < arr.length; i++){
arr2[i] = [zeroPaddingAddress(arr[i]), arr[i]];
}
arr2.sort(); // ソート
// ソート後の元の文字列を、ソート前の配列に戻す
for(var i = 0; i < arr2.length; i++){
arr[i] = arr2[i][1];
}
// 表示
for(var i = 0; i < arr.length; i++){
WScript.echo(arr[i]);
}
また下記コードのソート後の二次元配列(arr2)は下記のようになっています。
arr2=[
[000.000.000.000,show ip route],
[010.001.010.100,10.1.10.100/32],
[172.016.020.064,172.16.20.64/26],
[192.168.001.000,192.168.1.0]
];
おわりに
2次元配列を1次元配列に変える部分は、そういう関数があるかもしれないです。
この記事が気に入ったらサポートをしてみませんか?