Node.jsでCSVファイルを読み込む

何度も苦しんでいるので自分用のメモです。

SJISのCSVファイルを読み込んで、UTF-8の形式で書き出します。

relax_column_countのオプションは、CSVファイルのカラム数をチェックしないときに設定します。

import iconv from 'iconv-lite';
import { parse, transform } from 'csv';
import * as fs from 'fs';

const rs = fs.createReadStream("input.csv");
const ws = fs.createWriteStream("output.csv");

rs.pipe(iconv.decodeStream('SJIS'))
  .pipe(iconv.encodeStream('UTF-8'))
  .pipe(parse({
    relax_column_count: true
  }))
  .pipe(transform((row) => {
      /* 行ごとの処理 */
  }));
rs.on("close", () => resolve())