如何使用fast-csv节点模块停止读取某些特定索引处的csv行?在fast-csv中,它们是用于流暂停和恢复选项,但没有用于在某些特定行处关闭流的选项。代码如下:
var csvstream = CSV
.fromPath(self.fetchFilePath(fileName),{ ltrim : true, rtrim : true , headers : true , ignoreEmpty : true })
.transform(function (data){
Object.keys(data).forEach(function (key) {
var newKey = key.trim();
data[newKey] = data[key].trim();
});
return data;
})
.on("data", function(data){
//checking unicode char presence
Object.keys(data).forEach(function (key) {
if(data[key]){
var charValue = PUNYCODE.ucs2.decode(data[key]);
charValue = charValue.map(function(val) {
if(val>126){
FileCleanFlag=false;
errorData.push(data);
}
});
}else{
FileCleanFlag=false;
}
});
if(!FileCleanFlag){
#here want to jump to end block instead of parsing next rows
}
})
.on('end', function (){
#some work on rows containing error
});在上面的代码中,如果某一行发生错误,我如何跳转到"end“块?
发布于 2016-08-06 02:30:27
没有很好的方法来结束流。您可以只将FileCleanFlag定义为true,如果它为false,则不再执行任何操作。
var FileCleanFlag = true;
var csvstream = CSV
.fromPath(self.fetchFilePath(fileName),{ ltrim : true, rtrim : true , headers : true , ignoreEmpty : true })
.transform(function (data){
Object.keys(data).forEach(function (key) {
var newKey = key.trim();
data[newKey] = data[key].trim();
});
return data;
})
.on("data", function(data){
if (!FileCleanFlag) { return; }
//checking unicode char presence
Object.keys(data).forEach(function (key) {
if(data[key]){
var charValue = PUNYCODE.ucs2.decode(data[key]);
charValue = charValue.map(function(val) {
if(val>126){
FileCleanFlag=false;
errorData.push(data);
}
});
}else{
FileCleanFlag=false;
}
});
if(!FileCleanFlag){
#here want to jump to end block instead of parsing next rows
}
})
.on('end', function (){
#some work on rows containing error
});如果您需要沿着这条路走下去,请参阅How to close a readable stream (before end)?了解如何关闭流黑客。
此外,您还可以抛出错误并相应地捕获它。
https://stackoverflow.com/questions/38766847
复制相似问题