2016-10-21 17 views
0

1.4GBのcsvファイルがあります。これは行単位で処理し、各行を解析したいものです。各行が解析されたら、その行をストリームに追加し、出力をtsvファイルとして書き込みます。私は以下のコードがうまくいったと思っていましたが、期待通りに改行せずに前の行の最後に各行を追加するだけです。私はまた、.pipe(writeStream)の前に行に.pipe(split2())を追加しようとしましたが、書き込む前にデータを分割していましたが、単純にアプリケーションをフリーズしました。ノードCSV、変換、ストリームからTSVへのストリーム

誰もこのノードでこのプロセスを正常に読み書きしていますか?私は単に,に分割する代わりに、優れたCSVパーサを逃すだけでなく、各data文字列の末尾に\nを加えることに気づいた

var fs = require('fs'), 
    _ = require('lodash'), 
    split2 = require('split2'), 
    through2 = require('through2'); 

fs.createReadStream('input_file_name.csv') 
    .pipe(split2()) 
    .pipe(through2.obj(function (chunk, enc, callback) { 

    // Process the CSV row 
    var row = _.zipObject(['header1', 'header2', 'header3'], chunk.toString().split(',')); 
    this.push(processRow(row).join('\t')); // does an action to each row 

    callback() 
})) 
.pipe(fs.createWriteStream('output_file_name.tsv')); 

答えて

0

var fs = require('fs'), 
    _ = require('lodash'), 
    parse = require('csv-parse'), 
    transform = require('stream-transform'); 

var parser = parse(); 

var transformer = transform(function (record, callback) { 
    var row = _.zipObject(['header1', 'header2', 'header3'], record); 
    callback(null, processRow(row).join('\t') + '\n'); 
}, {parallel: 10} 
); 

fs.createReadStream('input_file_name.csv') 
    .pipe(parser) 
    .pipe(transformer) 
    .pipe(fs.createWriteStream('output_file_name.tsv')); 
関連する問題