見出し画像

はじめてのJScript+WSH その8 JScriptでファイル入力/ファイル出力

はじめに

JScriptのファイルの読み込み、書き込み、追記について確認します。

前の記事で実施した、下記の処理を、ファイル読み込みとファイル出力を使って実現します。

// 文字列を宣言
var commands =[
                "show run",
                "show ver",
                "",
                "show ip int brie",
                "",
                "!show tech",
                "",
                "show standby brief", 
                " ",
                "show ip route",
                "EOC",
                "show logging"
              ];

// コメントアウト"!"や空行を無視して出力
// また、EOC (end of command)を見つけたらそこで処理を終わりにする
for(var i = 0; i < commands.length; i++){
    if(commands[i].search(/^!/) > -1) continue;	            // 先頭が!なら行を無視
    if(commands[i].replace(/\s/g,"").length == 0) continue; // 空の行を無視
    if(commands[i].replace(/\s/g,"")=="EOC") break;         // EOCを見つけたらforを抜ける

    WScript.echo(commands[i]); // => show run, show ver, show ip int brie, show standby brief, show ip route 
}

読み込むファイル

input.txt の中身は下記の通り

show run
show ver

show ip int brie

!show tech

show standby brief

show ip route
EOC
show logging

output.txtの中身は下記になる予定

show run
show ver
show ip int brie
show standby brief
show ip route

コード

下記のようになります。
input.txtをinput_commands[]に格納し、
input_commands[]を基にoutput_commands[]を作成、
output_commands[]の内容をoutput.txtに出力しています。

// 変数宣言
var input_filename = "input.txt";
var output_filename = "output.txt";

var fileopen_state = 0; // 0:ASCII -1:Unicode -2:SystemDefault

var input_commands = [];
var output_commands = [];


// ファイル読み込み
var fs = new ActiveXObject( "Scripting.FileSystemObject" );
var file = fs.OpenTextFile( input_filename, 1, true, fileopen_state );		//  ファイルを読み取り専用で開く
while( !file.AtEndOfStream ){
    input_commands.push(file.ReadLine());
}
file.Close();  // ファイルを閉じる
fs = null;     // オブジェクトを初期化


// コメントアウト"!"や空行を無視して出力
// また、EOC (end of command)を見つけたらそこで処理を終わりにする
for(var i = 0; i < input_commands.length; i++){
    if(input_commands[i].search(/^!/) > -1) continue;	            // 先頭が!なら行を無視
    if(input_commands[i].replace(/\s/g,"").length == 0) continue; // 空の行を無視
    if(input_commands[i].replace(/\s/g,"")=="EOC") break;         // EOCを見つけたらforを抜ける

    output_commands.push(input_commands[i]);
}

// ファイル出力
if(output_commands.length > 0){
    var fs = new ActiveXObject( "Scripting.FileSystemObject" );
    var file = fs.OpenTextFile( output_filename, 2, true, fileopen_state );     // 2:新規に書き込み 8:追記
    for(var i=0;i<output_commands.length;i++){
        file.WriteLine(output_commands[i]);
    }
    file.Close(); //  ファイルを閉じる
    fs = null;    //  オブジェクトを解放
}

fsやfileはいったんこういうものだと思ってください。
※Scripting.FileSystemObjectというオブジェクトの中にあるOpenTextFile関数を用いてファイル入出力をするため、まずはオブジェクトfsを作成し、OpenTextFile()を呼び出し、返り値をfileオブジェクトと名付けています。
このfileオブジェクトはreadLineやwriteLineでテキストファイルの入出力ができます。

おわりに

ファイル入出力の部分は不思議な文字列に見えると思います。
この処理は次回の記事の自作関数にて中身を意識しなくても使えるようにする予定です。

次の記事

前の記事


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