我有以下解析器:

函数解析器(选项){
  选项=选项|| {};

  // options.objectMode = true;
  options.encoding ='utf8';

  Transform.call(this,options);

  this._rawHeader = [];
  this.header = null;
}

util.inherits(解析器,变换);

Parser.prototype._transform = function(数据,编码,完成){
  this.push(this._parseRow(data));
  done();
};

//将数据行解析为一个对象
Parser.prototype._parseRow = function(row){
  var fields = row.split(“;”);
  var obj = {代码:fields [0],名称:fields [1] .trim()};
  返回obj.toString();
};


var parser = new Parser({});

//传送流
process.stdin
  .pipe(解析器)
  .pipe(process.stdout);


但是,我得到:

ACARIT21012; CASSA RURA没有“拆分”方法
    在Parser._parseRow(/Users/pmu/projects/b/s/lib/parser.js:38:20)
    在Parser._transform(/Users/pmu/projects/b/s/lib/parser.js:32:18)
    在Parser.Transform._read(_stream_transform.js:179:10)
    在Parser.Transform._write(_stream_transform.js:167:12)
    在doWrite(_stream_writable.js:219:10)
    在writeOrBuffer(_stream_writable.js:209:5)
    在Parser.Writable.write(_stream_writable.js:180:11)
    在写时(_stream_visible.js:573:24)
    在流动(_stream_visible.js:582:7)
    在Socket.pipeOnReadable(_stream_read.js:614:5)


我怀疑流已中断,但不确定如何防止这种情况发生

最佳答案

传递给Readable流的数据是Buffer对象,而不是StringBuffer没有split方法。您必须在数据上手动调用toString()才能将其作为String进行操作。

Parser.prototype._transform = function(data, encoding, done) {
  this.push(this._parseRow(data.toString()));
  done();
};

关于javascript - 如何用流解析 Node 中的CSV?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20774955/

10-13 00:37