2015-03-13 90 views
0

我想根据属性字段的值将CSV分割为新的CSV文件。在测试了几个不同的模块之后,它看起来像fast-csv是一个不错的选择。不过,我需要一些关于如何通过属性分割文件的帮助。节点:按值分割CSV

我最初以为这样做的变换:

.transform(function(data){ 
    if (data.AttributeValue == '10') { 
     return { 
      data 
     }; 
    } else if (data.AttributeValue == '5') { 
     return { 
      data 
     }; 
    } else { 
     data 
    }) 

})

或者我可以使用验证:

.validate(function(data){ 
    return data.AttributeValue == '10'; 
}) 

我需要帮助是使用哪一个和如何将数据行发送到不同的writeStreams。

.pipe(fs.createWriteStream("10.csv", {encoding: "utf8"})); 
.pipe(fs.createWriteStream("5.csv", {encoding: "utf8"})); 
.pipe(fs.createWriteStream("Other.csv", {encoding: "utf8"})); 

我已经在Python中完成了这项工作,但试图将它迁移到Node上比我想象的更复杂。

感谢

回答

0

您可以使用这样的事情,从您的验证测试的数据发送到另一个函数。

.validate(function(data){ 
    if(data.attribute = '10'){ 
     ten(data); 
    } else { 
     notTen(data); 
    } 
}); 

然后,你可以简单地使用一个CSV作家写出来,以CSV,每个CSV你需要打开CSV作家:

var csvStream = csv.createWriteStream({headers: true}), 
    writableStream = fs.createWriteStream("not10.csv"); 

writableStream.on("finish", function(){ 
    console.log("DONE!"); 
}); 

csvStream.pipe(writableStream); 

function writeToCsv(data){ 
    csvStream.write(data); 
} 

每个CSV重复,你需要写。

可能不是最好的办法,但我对此很新,而且它似乎工作。