なんだかGoodVibes

日々の勉強メモです。

【Node】ファイルから指定文字が含まれる行を抽出する

こんにちは。
結構便利なのでメモです。



概要

指定したファイルで特定の文字が含まれている行を
抽出して新規のテキストに出力します。
サンプルでは、直接ファイル名・文字を指定して
.txtに出力していますが、用途に応じてアレンジできるかと思います。


サンプル

各関数で、成功した場合のみコールバックを
呼ぶようにしています。
サンプルではエラー時のコールバックは用意していませので
必要な場合は追加してください。

var fs = require('fs');

const MojiCode = "utf8";
const FileName = "test.txt";
const TaishoMoji = "test";

var OriginalLines = [];
var ResuleLines = "";


// ファイルの読み込みを行います。
function readData(callback) {

    var result = true;

    try {
        var path = "./" + FileName;
        OriginalLines = fs.readFileSync(path, MojiCode).toString().split('\r\n');

    } catch (err) {
        console.log("ファイルの読み込みに失敗しました。");
        result = false;
    }

    if (result == true) {
        callback();
    }
}

// 対象の文字が含まれている行を抽出します。
function getLines(callback) {

    var result = true;

    var newLog = [];
    for (var lineIdx = 0; lineIdx < OriginalLines.length; lineIdx++) {

        var isExists = false;
        if (OriginalLines[lineIdx].indexOf(TaishoMoji) != -1) {
            isExists = true;
        }

        if(isExists) {
            ResuleLines = ResuleLines + OriginalLines[lineIdx];
            ResuleLines = ResuleLines + '\r\n';
        }
    }

    if (result == true) {
        callback();
    }
}

// 結果を書き出します。
function createFile() {

    try {
        var oldFileName = FileName.split('.');
        var newFileName = oldFileName[0] + '_' + TaishoMoji + ".txt";

        var newFilePath = './' + newFileName;
        fs.writeFileSync(newFilePath, ResuleLines, MojiCode);

    } catch (err) {
        console.log('ファイルの書き込みに失敗しました。');
    }
}

// 関数の呼び出し
readData(function() {
    getLines(function() {
        createFile()
    })
});

console.log("終了.")


まとめ

サンプルはシンプルなものにしていますが
アレンジが色々できるのではないかと思います。
対象文字を配列でもたせるようにしたり
設定ファイルなどを用意するのも便利です。
以上です。