こんにちは。
結構便利なのでメモです。
概要
指定したファイルで特定の文字が含まれている行を
抽出して新規のテキストに出力します。
サンプルでは、直接ファイル名・文字を指定して
.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("終了.")
まとめ
サンプルはシンプルなものにしていますが
アレンジが色々できるのではないかと思います。
対象文字を配列でもたせるようにしたり
設定ファイルなどを用意するのも便利です。
以上です。