こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。
いろんなデータを扱う業務をしていると、CSVのファイルをやりとりする事があります。
で、そのCSVをプログラムで取り込もうとした時に、数字のカラムがダブルクオートで囲まれていて、そのカラムの中にカンマが入ってて、、というような事に困る事が多々あります。
ExcelでCSVを作るとよくあるパターンです。
そこで「数字はカンマなしの文字列になおして!」なんて差し戻すのもアレなので、Node.jsでササっと不要なカンマを取り除くようにしました。
つまり、仮にこういうCSVがあったとして
#input.csv 123,"456,789","1,234,567" "1,000",567,"89,123" 4,567,"8,900"
こういうCSVに変換したい、というケースです。
#newinput.csv 123,456789,1234567 1000,567,89123 4,567,8900
まずは、Node.jsのnode-csvというパッケージを使います。まずはnpmでインストールします。
$ npm install csv --save
次にソースコードです。
/* * main.js * usage: node main.js input.csv */ var file = process.argv[2]; //引数で入力ファイル名を指定 var csv = require('csv'); var fs = require('fs'); var ws = fs.createWriteStream('new' + process.argv[2]); //出力ファイル名は new+元ファイル名 var parser = csv.parse({trim:true}, function(err, data) { for (var i=0; i<data.length; i++) { var outdata = ""; for (var j=0; j<data[i].length; j++) { outdata = outdata + data[i][j].replace(/,/g, ""); if ((j + 1) == data[i].length) { outdata = outdata + "\n"; } else { outdata = outdata + ","; } } ws.write(outdata); } }).on('end', () => { ws.end(); }); fs.createReadStream(file).pipe(parser);
使い方は
$ node main.js input.csv
というように、引数で入力ファイル名を指定します。
これを応用すれば、CSV内に含まれる不要な文字列を除去できます。
ちょこっと役に立つプログラムです。