Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9350

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

$
0
0

注意

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

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
ほげ
ほげほげ
ほげほげほげ
ほげほげほげほげ
ほげほげほげほげほげ
ほげほげほげほげほげほげ
ほげほげほげほげほげほげほげ
ほげほげほげほげほげほげほげほげ

Viewing all articles
Browse latest Browse all 9350

Trending Articles