TypeScript でファイルを1行ずつ読み込んで処理する方法

NodeJS では、fs.readFileSyncなどでファイルを一括で読み込む方法はありますが、
1行ずつ読み込んで処理したかったので、やり方を記載します。

readline を使う

NodeJS の readlineを使って、以下のように書きます。

import * as fs from "fs"
import * as readline from "readline"

function ReadFileLine_SJIS(InputFilePath:string, CallBack:Function) {

    var stream = fs.createReadStream(InputFilePath);
    var reader = readline.createInterface({ input: stream });

    reader.on("line", (data:string) => {
        CallBack(data)
    });
}
  • fs.createReadStream でファイルストリームを作成します。
  • その後、readline.createInterfaceで入力インタフェースに、作成したファイルストリームをセットします。
    readline.on` メソッドで1行ずつ処理します。

onメソッド以降はコールバック関数で記載していますが、引数にとらずに直接ロジックを
記載してもいいと思います。

Readline | Node.js v12.5.0 Documentation

文字コードを シフトJIS で読み込む

文字コードをSJISで読み込む場合は、npm パッケージの iconv-lite を使用します。

iconv-lite | npm

import * as fs from "fs"
import * as readline from "readline"
var iconv = require("iconv-lite");

function ReadFileLine_SJIS(InputFilePath:string, CallBack:Function) {

    var stream = fs.createReadStream(InputFilePath).pipe(iconv.decodeStream("Shift_JIS"));
    var reader = readline.createInterface({ input: stream });

    reader.on("line", (data:string) => {
        CallBack(data)
    });
}
  • 違いは、fs.createReadStream の後ろに iconv.decodeStreamShift_IJSに変換しています。

返信を残す

メールアドレスが公開されることはありません。