プログラミング

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. Linux

    無料のWindows10仮想マシンをEdge/IE11検証用途で使う

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

  2. Databricks

    Databricks: Spark RDDで使う主なメソッド

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

  3. Google Apps Script(GAS)

    【Google App Script】GASを利用してslackに投稿するbotを作る

    こんにちは、エクスチュアの岩川です。業務でSlackを使用さ…

  4. ChatGPT

    ChatGPTとVSCodeの連携方法とその使用例:開発効率を飛躍的にアップさせる

    こんにちは、石原と申します。今回のブログが初投稿となります。…

  5. Databricks

    Databricks: Spark DataFrameでピボットグラフを作る

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

  6. Adobe Analytics

    Adobe AEP SDK: リバースプロキシを使ったアプリ計測検証方法

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

最近の記事

  1. SnowPro Advanced: Architect 合格…
  2. LangChainのソースコードから実装を見てみる(Chat…
  3. Tableau×Teams連携
  4. AIを使ったマーケティングゲームを作ってみた
  5. Snowflakeや最新データ基盤が広義のマーケティングにも…
  1. Adobe Launch

    DTMからAdobe Launchへの移行:4段階のアプローチ
  2. フォーム分析

    【Tips】フォーム分析について
  3. IT用語集

    API(Application Programming Interface)って…
  4. Adobe Dynamic Tag Manager

    Tag Manager: Adobe DTM で Google Analytic…
  5. Adobe Analytics

    Adobe Analytics: データフィードをGoogle BigQuery…
PAGE TOP