こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。
いろんなデータを扱う業務をしていると、CSVのファイルをやりとりする事があります。
で、そのCSVをプログラムで取り込もうとした時に、数字のカラムがダブルクオートで囲まれていて、そのカラムの中にカンマが入ってて、、というような事に困る事が多々あります。
ExcelでCSVを作るとよくあるパターンです。
そこで「数字はカンマなしの文字列になおして!」なんて差し戻すのもアレなので、Node.jsでササっと不要なカンマを取り除くようにしました。
つまり、仮にこういうCSVがあったとして
1 2 3 4 | #input.csv 123, "456,789" , "1,234,567" "1,000" ,567, "89,123" 4,567, "8,900" |
こういうCSVに変換したい、というケースです。
1 2 3 4 | #newinput.csv 123,456789,1234567 1000,567,89123 4,567,8900 |
まずは、Node.jsのnode-csvというパッケージを使います。まずはnpmでインストールします。
1 | $ npm install csv --save |
次にソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /* * 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); |
使い方は
1 | $ node main.js input.csv |
というように、引数で入力ファイル名を指定します。
これを応用すれば、CSV内に含まれる不要な文字列を除去できます。
ちょこっと役に立つプログラムです。