2015-07-06 46 views
0

我在處理多個流時遇到了問題。 考慮這種情況下,我有我想產生這樣一個輸出,其內容是從另一個流創建流並在node.js中加入兩個流

id,val 
1,100 
2,75 

,一半應該是VAL的50%data.csv文件,我們需要添加同一行,但由10

乘以
id,val,half 
1,100,50 
2,75,37.5 
10,100,500 
20,75,37.5 

我成功地從文件中讀取csv,轉換並處理它。我只能生成1個流。多數民衆贊成在一開始只有2行,所以我的輸出也包含2行。我能夠產生這樣的結果

id,val,half 
1,100,50 
2,75,37.5 

但無法添加額外的部分。即整個內容要乘以10.

一個解決方案非常簡單,就是讀取文件中的內容,以javascript Array/Object格式對其進行處理並寫入磁盤。這不涉及管道。 我想根據管道編寫整個事情。

我已經有這樣的代碼。

// Initialize file streams where the output will be written to 
const forecastcsv = fs.createWriteStream(forecastfile); 
fs.createReadStream(argv.file).pipe(parser).pipe(transformer).pipe(stringifier).pipe(forecastcsv); 

無法想象我如何可以創建兩個流(一個是做一半,另一種是乘做10個)的加入到其中來實現最終的CSV文件雙排。

感謝

+0

你看這個問題http://stackoverflow.com/questions/16431163/concatenate-two-or-n-streams? – kyrisu

+0

@kyrisu是的,這會在一定程度上解決我的問題,但我無法創建兩個流。 –

+0

你想要一個格式,所有的數據是2x是在原始數據之後嗎? –

回答

1

感謝@克里斯安德森 - MSFT 我有誤解約1:1,我們可以發出更多的數據,因此,這裏是我的變壓器這是工作。不需要多個流。

var transformer = csv.transform(function (record, callback) { 
    record.half = record.value/2; 
    var extra = JSON.parse(JSON.stringify(record)); 
    extra.id = extra.id * 10; 
    extra.value = extra.value * 10; 
    extra.half = extra.half * 10; 
    callback.call(this, null, record, extra); 
}); 
相關問題