LoginSignup
48
54

More than 5 years have passed since last update.

nodeでcsvの読み書き

Last updated at Posted at 2019-01-26

node.jsでcsvの入出力をする機会があったのでメモ。

やりたいこ

csvを読み込み、csvの特定のカラムに処理を加え、再度csvとして出力したい。
例えば下記のような感じ。

1,aaa,hoge
   ↓
1,AAA,hoge

2カラム目を大文字に変換して出力。

方針と準備

node-csvというモジュールがあるみたいなので、とりあえずそれを使ってみる。

npm install --save csv

テスト用のCSVファイルをindex.jsと同じ階層に作成。

test.csv
1,aaaa,hoge
2,bbbb,foo

実装

なんか独特の書き方。

index.js
const fs = require('fs');
const csv = require('csv');

//処理(跡でpipeに食べさせる)
const parser = csv.parse((error, data) => {

    //内容出力
    console.log('初期データ');
    console.log(data);

    //変換後の配列を格納
    let newData = [];

    //ループしながら1行ずつ処理
    data.forEach((element, index, array) => {
        let row = [];
        row.push(element[0]);
        row.push(element[1].toUpperCase()); //2カラム目を大文字へ
        row.push(element[2]);
        //新たに1行分の配列(row)を作成し、新配列(newData)に追加。
        newData.push(row);
    })

    console.log('処理データ');
    console.log(newData);

    //write
    csv.stringify(newData,(error,output)=>{
        fs.writeFile('out.csv',output,(error)=>{
            console.log('処理データをCSV出力しました。');
        })
    })
})

//読み込みと処理を実行
fs.createReadStream('test.csv').pipe(parser);

header行を読み飛ばすには下記のように、csv.parse()において、from_lineオプションを設定すればよい。

csv.parse({ from_line: 2 }, (error, data) => {})

実行してみる。

node index.js

出力結果。

out.csv
1,AAAA,hoge
2,BBBB,foo

その他

SJISとか読むならゴニョゴニョする必要があるらしい。

48
54
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
48
54