2016-10-21 8 views
2

node.js npm package fast-csvを使用してこれを試しましたが、解決策が得られません.CSVファイルを正常に読み取ることができます。新しい列を既存のCSVファイルに追加します。ノードjsを使用してcsvファイルに新しい列を追加する方法

私の質問:

どのようにcsvファイルに新しい列を追加するには? csvを更新するには?私は2つの列SourceLatLongDestLatLongを取ると私はマイルの距離を計算するから、私は、filecsvのfile1.csvを使用する上記のプログラムで

var csv = require("fast-csv"); 
var fs = require('fs'); 
var stream = fs.createReadStream("file1.csv"); 
var service = 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=53.78943,-0.9985&destinations=53.540867,-0.510699&mode=driving&language=en-US'; 
var source = []; 
var dest = []; 
var distance = require('google-distance'); 

distance.apiKey = '************'; 
var i = 1; 
csv 
    .fromStream(stream, { headers: true }) 
    .on("data", function(data) { 
     //get source and distance array 
     source = data.SourceLatLong; 
     dest = data.DestBREPLatLong; 
     //print source and destinatoon 
     console.log(source); 
     console.log(dest); 
     distance.get({ 
       // index: i, 
       origin: source, 
       destination: dest, 
       units: 'imperial' 
      }, 

      function(err, map_data) { 

       if (err) return console.log(err); 
       //console.log(map_data); 
       //console miles of aff 
       console.log('source lat long ' + ':' + data.SourceLatLong + ' , ' + 'Dest lat long' + ':' + data.DestBREPLatLong + ',' + ' distance ' + ':' + map_data.distance + ' ' + i++); 

      }); 
    }) 

.on("end", function() { 
    console.log("done"); 
}); 

。ファイルに新しいマイル列を追加する必要があります.csv

+0

このAPIキーが機能的なものであれば、APIキーを変更してアカウントから削除し、新しいキーを作成することをお勧めします。実際のパスワード、電子メール、APIキーを公開サイト(stackoverflowなど)に投稿しないように注意してください。悪意のある目的に使用される可能性があります。 – Surya

+0

同じファイルを変更しますか?それとも、新しいファイルに出力してもいいですか? –

+0

感謝、あなたの答えをありがとう –

答えて

2

json to csvの解析では、fast-csvの代わりにcsv-parserパッケージを使用し、json2csvを使用します。

csv-parserを使用してcsvの各行をjsonに変換し、結果のjsonオブジェクトに新しいフィールドを追加し、各行に対してこれを行い、結果を配列に入れ、その配列を変換しますjson2csvパッケージでcsvに変換します。ここで

はコードです:

var csv = require('csv-parser'); 
var fs = require('fs'); 
var json2csv = require('json2csv'); 
var dataArray = []; 

fs.createReadStream('your-original-csv-file.csv') 
    .pipe(csv()) 
    .on('data', function (data) { 
    data.newColumn = newColumnValue; 
    dataArray.push(data); 
    }) 
    .on('end', function(){ 
    var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) }); 
    fs.writeFileSync(fileName, result); 
    }); 

fs.writeFileSyncはとにかく元のファイルが上書きされますので、あなたも、元のCSVファイルに保存することができます。

関連する問題