使用Node.js中的fast-csv包读写CSV

时间:2016-10-06 20:31:59

标签: node.js csv

我正在尝试编写一个读取csv文件的简单节点程序,提取一列(比如说第二个)并将其写入另一个CSV文件。我正在读取数组中的内容,然后将该数组写入文件。

每个步骤中的阶段和数据

inputfile中

123,456,789,abc
def,ghi,232,jkl

阵列

['456','ghi']

OUTPUTFILE

4,5,6
g,h,i

需要输出

456
ghi

我只是错过了配置,还是我写错数据的方式?我在END块中写入文件的代码块是不正确的?

这是我的代码

var fast_csv = require('fast-csv');
var tempArray=new Array();
console.log("START");
fast_csv.fromPath("inputfile.txt").on("data", function(data){
    tempArray.push(data[1]);  
})
  .on("end", function(){
    tempArray.sort();
    console.log(tempArray);

    fast_csv.writeToPath("outputfile.csv", tempArray)
   .on("finish", function(){
      console.log("END");
   });

}); 

2 个答案:

答案 0 :(得分:1)

它将数组中的每个元素视为一个数组,因此'456'被视为一个元素为4,5,6的数组。

我做的一个奇怪的解决方法是遍历数组并将每个元素放在它自己的数组中,所以它将是:

var newArray = [];

 for( var i = 0; i < tempArray.length; i++){
 var arr = [];
 arr.push(tempArray[i]);
newArray.push(arr);
}

然后写下“newArray”。

但是否则如果你逐行写,你可以将每个元素放在括号内,如:

var fast_csv = fastcsv.createWriteStream();
var writeStream = fs.createWriteStream("outputfile.csv");
fast_csv.pipe(writeStream);

for(var i = 0; i < tempArray.length; i++){
    fast_csv.write( [ tempArray[i]  ] );             //each element inside bracket
    }
fast_csv.end();

答案 1 :(得分:0)

tempArray.push(data[1]);更改为:tempArray.push([data[1]]);

writeToPath采用数组数组。

文档:https://www.npmjs.com/package/fast-csv