LoginSignup
26
25

More than 3 years have passed since last update.

Node.jsで、ファイルから1行ずつ読み込むためのreadlineモジュール

Last updated at Posted at 2019-11-28

注意

この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。

Node.jsでファイルに1行ずつ書き込みたい。

Node.jsを使う際、.txtファイルや.csvファイルを一行ずつ読み込みたい場合がありました。
そんな時に使えるのがreadlineモジュールです。Node.jsで標準に備えられています。

readlineモジュールの使い方

まずは以下のように、ファイルに書きます。

index.js
'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行ずつ読み込みたいとします。

input.csv
ほげ
ほげほげ
ほげほげほげ
ほげほげほげほげ
ほげほげほげほげほげ
ほげほげほげほげほげほげ
ほげほげほげほげほげほげほげ
ほげほげほげほげほげほげほげほげ

以下のようにJSファイルを実行します。

console
$ node index.js
> END!

すると、書き込みたいファイルに以下のように、一字一句違わずに書き込まれているはずです。

output.csv
ほげ
ほげほげ
ほげほげほげ
ほげほげほげほげ
ほげほげほげほげほげ
ほげほげほげほげほげほげ
ほげほげほげほげほげほげほげ
ほげほげほげほげほげほげほげほげ
26
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25