Javascript节点从CSV文件读取并将数据存储到对象中

时间:2017-10-31 12:49:54

标签: javascript node.js csv

尝试读取csv文件并将数据存储到一个对象中,然后我可以将其用于其他任务。

    var csv = require('csv');

    var obj = csv();

    var filename = process.argv[2];

    function Employee(eno, ename, sal) {

        this.EmpNo = eno;
        this.EmpName = ename;
        this.Salary = sal;
    };

    var Employee = {};

    obj.from.path(filename).to.array(function (data) {
        for (var index = 0; index < data.length; index++) {
               Employees.push(new Employee(data[index][0], data[index][1], data[index][2]));
        }
    });

console.log(Employee);

运行时我收到错误:

var obj = csv();
          ^

TypeError: csv is not a function

有什么想法吗?

编辑:

根据下面的答案更改为此,但无法在函数外部填充字符串:

string = {}

var lineReader = require('readline').createInterface({
    input: fs.createReadStream(filename)
});

lineReader.on('line', function (line) {
    var splitLine = line.split(',');

        string[splitLine[0]] = {
            name: splitLine[0],
            dob: splitLine[1],
            employeeid: splitLine[2],
            country: domain,
            zone: splitLine[4],
            type: splitLine[5],
            id: splitLine[7],
            number: splitLine[8]
        }

    lineReader.close()
    }
})

console.log(string)

1 个答案:

答案 0 :(得分:4)

查看模块的documentation,看起来你没有正确使用它。 csv不是构造函数,而是具有应该调用的方法。有一些examples可用于指导您正确使用。

来自模块网站的回调示例;

var csv = require('csv');

csv.generate({seed: 1, columns: 2, length: 20}, function(err, data){
  csv.parse(data, function(err, data){
    csv.transform(data, function(data){
      return data.map(function(value){return value.toUpperCase()});
    }, function(err, data){
      csv.stringify(data, function(err, data){
        process.stdout.write(data);
      });
    });
  });
});

如果要从文件中读取,并将内容附加到数组中;

输入

name,age
Alex,24
Sam,99

代码

var fs = require('fs');
var csv = require('csv');
var strings = [];

var readStream = fs.createReadStream('./input.csv');

var parser = csv.parse({columns:true});

parser.on('readable', function() {
  while(record = parser.read()) {
    strings.push(record);
  }
});

parser.on('error', function(err) {
  console.log(err.message);
});

parser.on('finish', (function() {
  console.log(strings);
}));

readStream.pipe(parser);

输出

[ { name: 'Alex', age: '24' }, { name: 'Sam', age: '99' } ]