##注意
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。
##Node.jsでファイルに1行ずつ書き込みたい。
Node.jsを使う際、.txtファイルや.csvファイルを一行ずつ読み込みたい場合がありました。
そんな時に使えるのがreadlineモジュールです。Node.jsで標準に備えられています。
##readlineモジュールの使い方
まずは以下のように、ファイルに書きます。
'use strict';
//モジュールの読み込み
const fs = require('fs');
const readline = require('readline');
//readstreamを作成
const rs = fs.createReadStream('./input.csv');
//writestreamを作成
const ws = fs.createWriteStream('./output.csv');
//インターフェースの設定
const rl = readline.createInterface({
//読み込みたいストリームの設定
input: rs,
//書き出したいストリームの設定
output: ws
});
//1行ずつ読み込む設定
rl.on('line', (lineString) => {
//wsに一行ずつ書き込む
ws.write(lineString + '\n');
});
rl.on('close', () => {
console.log("END!");
});
####ストリームの作成
readlineを利用するときは、単独では使えずストリームと組み合わせて使わなければいけません。そのため、以下のように読み込みストリームと書き込みストリームを作成しています。
//readstreamを作成
const rs = fs.createReadStream('./input.csv');
//writestreamを作成
const ws = fs.createWriteStream('./output.csv');
####インターフェースの設定
以下の部分では、readlineでどのストリームを読み込むのか、どのストリームに書き出すのかの設定をしています。
//インターフェースの設定
const rl = readline.createInterface({
//読み込みたいストリームの設定
input: rs,
//書き出したいストリームの設定
output: ws
});
####1行ずつ読み込んでいく設定
最後に1行ずつ読み込んでいく設定です。
'line'イベントが起きたら(1行読み込まれたら)、その行がlineStringに代入されます、そしてws(書き込みストリーム)に書き込まれていきます。
そのままだと、ws(書き込みストリーム)に設定したファイルの最初の行に、読み込んだすべての行が書き込まれてしまうので、以下のように改行"\n"をつけています。
//1行ずつ読み込む設定
rl.on('line', (lineString) => {
//wsに一行ずつ書き込む
ws.write(lineString + '\n');
});
##実行してみる
例えば、以下のファイルを1行ずつ読み込みたいとします。
ほげ
ほげほげ
ほげほげほげ
ほげほげほげほげ
ほげほげほげほげほげ
ほげほげほげほげほげほげ
ほげほげほげほげほげほげほげ
ほげほげほげほげほげほげほげほげ
以下のようにJSファイルを実行します。
$ node index.js
> END!
すると、書き込みたいファイルに以下のように、一字一句違わずに書き込まれているはずです。
ほげ
ほげほげ
ほげほげほげ
ほげほげほげほげ
ほげほげほげほげほげ
ほげほげほげほげほげほげ
ほげほげほげほげほげほげほげ
ほげほげほげほげほげほげほげほげ