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