【发布时间】:2015-09-23 02:57:10
【问题描述】:
我在处理多个流时遇到问题。 考虑这种情况,我有 data.csv 文件,其内容是
id,val
1,100
2,75
我想产生这样的输出,一半应该是 val 的 50%,我们需要追加相同的行但乘以 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 文件中实现双行。
谢谢
【问题讨论】:
-
@kyrisu 是的,这将在一定程度上解决我的问题,但我无法创建两个流。
-
您想要一种所有 2x 数据都在原始数据之后的格式吗?
-
@ChrisAnderson-MSFT 是的
-
如果你这样做,你会得到
a, 10*a, b, 10*b等。订单不能保证。如果没问题,只需让您的转换函数发出两条记录,一条 1x 和一条 10x。没有什么能强迫你以 1:1 的比例发射。 :)