我有以下解析器:
函数解析器(选项){
选项=选项|| {};
// 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
对象,而不是String
。 Buffer
没有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/