更新日:

Node.jsでcsv(Shift_JIS)を読み込む方法・書き込む方法

環境

  • node.js 12.14.0

ソース

package.json
{
  "dependencies": {
    "csv": "^5.3.2",
    "iconv-lite": "^0.5.1"
  }
}
test.csv
あ, a, b
1, え, 鈴
index.js
const fs = require('fs');
const iconv = require('iconv-lite');
const csv = require('csv');

/**
 * shift_jisのcsvを読み込む
 * @param {*} path
 */
const read_csv_shiftjis = path => {
  return new Promise(resolve => {
    fs.createReadStream(path)
      .pipe(iconv.decodeStream('Shift_JIS'))
      .pipe(
        csv.parse((err, data) => {
          resolve(data);
        })
      );
  });
};

/**
 * shift_jisでcsvに書き込む
 * @param {*} path
 * @param {*} data
 */
const write_csv_shiftjis = (path, data) => {
  return new Promise(async (resolve, reject) => {
    /**
     * 二次元配列をcsvで書き込めるように変換する
     * @param {*} array
     */
    const data_to_csv = array => {
      return new Promise((resolve, reject) => {
        csv.stringify(array, (err, output) => {
          if (err) {
            console.log('エラーが発生しました。' + err);
            reject(err);
            return;
          }
          resolve(output);
        });
      });
    };

    try {
      const _csv_data = await data_to_csv(data);

      fs.writeFile(path, iconv.encode(_csv_data, 'shift_jis'), err => {
        if (err) {
          console.log('エラーが発生しました。' + err);
          reject(err);
          return;
        }
        resolve();
      });
    } catch (err) {
      reject(err);
    }
  });
};

/**
 * main
 */
const main = async () => {
  const _csv = await read_csv_shiftjis('test.csv');
  console.log(_csv);

  await write_csv_shiftjis('write.csv', [
    ['あああ', '1'],
    ['てすと', 2]
  ]);
};

main();

コマンド

bash
$ npm i
$ node index