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 を使用します。
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.decodeStream
でShift_IJS
に変換しています。
実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)
楽天で購入
](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)
コメント