2016-10-12 5 views
0

後、私は次のセットアップでは、CSV-解析実行されている非常に奇妙な行動を経験しています: CSV -^1.1.0 ストリーム変換 -^0.1.1 ノード - v4.6.0ノードCSV-解析停止16行

とオブジェクトの配列にCSVを変換するために、次のコードを実行:

var parse = require('csv').parse 
var fs = require('fs') 
var streamtransform = require('stream-transform') 

function mapCsvRow(headers, record) { 
    return record.reduce((p, c, i) => { 
    p[headers[i]] = c //eslint-disable-line 
    return p 
    }, {}) 
} 

function parseFile(path) { 
    var headers 
    var output = [] 
    var parser = parse({ delimiter: ',' }) 
    var input = fs.createReadStream(path) 

    var transformer = streamtransform((record) => { 
    if (!headers) { 
     headers = record 
     return record 
    } 

    output.push(mapCsvRow(headers, record)) 
    return record 
    }) 

    // Return a new promise to wrap the parsing stream 
    return new Promise((resolve, reject) => { 
    input 
     .pipe(parser) 
     .pipe(transformer) 
     .on('error', e => reject(e)) 
     .on('finish',() => resolve(output)) 
    }) 
} 

module.exports = parseFile 

module.exportsは=構文解析ファイル 何が起こることは、パーサーは16件のレコードを超えるファイルを処理する上で停止していることです。エラーなし、仕上げなし、何もありません。

これをデバッグする方法がわかりません。そのとき、パーサからの入力を取得できませんでした。

+0

'.csv'ファイルには、行/行データのいずれかにカンマが追加されていますか? –

答えて

0

あなたはリーダーストリームとトランスフォーマストリームを持っているようですが、ライターストリームはありません。したがって、トランスフォーマストリームが一杯になり、リードストリームが一時停止します。

出力配列を使用しないようにコードを書き直してください。結果をメモリに保持するのであれば、ストリームを使用するのは無意味です。

関連する問題