プログラミング

Node.jsでCSVファイル内のダブルクオートで囲まれたカラム内のカンマを除去する

こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。

いろんなデータを扱う業務をしていると、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内に含まれる不要な文字列を除去できます。
ちょこっと役に立つプログラムです。

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Adobe Analytics

    Adobe AnaltyicsとGoogle Analytics の「生Webビーコン」をBigQu…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  2. Google Analytics

    Google Analytics: ユニバーサルアナリティクスの拡張Eコマース用dataLayerを…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Adobe Analytics

    Adobe Analyticsに入り切らないデータをBigQueryに投入する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  4. Google BigQuery

    Google Apps Scriptを使ってスプレッドシートからBigQueryのテーブルを更新する…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  5. Adobe Analytics

    AdobeAnalytics: GTMのdataLayerをAdobeAnalyticsの処理ルール…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  6. Google Cloud Platform

    Google Compute Engine: 一定時間経過したらタスクを強制終了する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

最近の記事

  1. 【GA4/GTM】dataLayerを使ってカスタムイベント…
  2. 【GA4/GTM】dataLayerを活用しよう
  3. ジャーニーマップをデジタルマーケティングの視点で
  4. ChatGPT ProからClaude3 Proへ移行した話…
  5. その分析、やり方あってる?記述統計と推測統計の違い
  1. ObservePoint

    ObservePoint: Cookieを書いたヤツを見つける
  2. GA 360 Suite

    Google Analytics 360: BigQueryを使ってアトリビュー…
  3. KARTE

    KARTE:指定期間の来訪が再訪問の場合にスコアリングする
  4. Tableau

    TableauでTreasure Data上のデータへ接続する方法(2019/1…
  5. ヒートマップ

    ヒートマップを画像としてキャプチャする
PAGE TOP