node-csvを使って、CSVファイルを読み込む方法です。
node-csvでCSVファイルを読み込む
まずはインストール。
npm install csv --save
sample.csvを読み込み、コンソールに出力します。
const fs = require('fs');
const parse = require('csv').parse;
const parser = parse((err, data) => console.log(data));
fs.createReadStream(__dirname + '/sample.csv').pipe(parser);
CSVファイルの文字コードがUTF-8のときは正しく表示されました。
しかし、Shift_JISのファイルはときは文字化けしました。
iconv-liteで文字コードを変換する
Shift_JISのファイルを読み込むことができるように、iconv-liteをインストールします。
npm install iconv-lite --save
iconv-liteを使って、Shift_JISのCSVファイルを読み込みます。
const fs = require('fs');
const parse = require('csv').parse;
const iconv = require('iconv-lite');
const parser = parse((err, data) => console.log(data));
fs.createReadStream(__dirname + '/sample.csv')
.pipe(iconv.decodeStream('shift_jis'))
.pipe(parser);
正しく読み込めました。
CSVファイルのデータを文字列の配列として取得する
読み込んだCSVファイルのデータは、parser中のdataに入っています。
dataが各行の配列になっており、各行はセルの値の文字列の配列になっています。
const fs = require('fs');
const csv = require('csv');
const parser = csv.parse((err, data) => {
console.log('CSVファイルの行数=' + data.length);
data.forEach((element, index, array) => console.log(index + '行目=' + element));
});
fs.createReadStream(__dirname + '/sample.csv').pipe(parser);
CSVファイルのデータをオブジェクトの配列として取得する
オプションに{columns:true}をつけると、1行目をプロパティ名にしたオブジェクトの配列が返ります。
TypeScriptのサンプルコード。
import * as fs from "fs";
import * as csv from "csv";
fs.readFile(__dirname + "/sample.csv", (err, data) => {
// オプションに{columns:true}をつけると、1行目をプロパティ名にしたオブジェクトの配列が返る
csv.parse(data, { columns: true }, (err, output: Array<Object>) => {
output.forEach((value) => { console.log(value); });
});
});
samle.csv
abc,def,ghi
123,456,789
ABC,DEF,GHI
実行結果
{ abc: '123', def: '456', ghi: '789' }
{ abc: 'ABC', def: 'DEF', ghi: 'GHI' }