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();