2016-08-04 5 views
0

fast-csvノードモジュールを使用して特定のインデックスでcsv行の読み取りを停止する方法はありますか。 fast-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 
}); 

エラーは、いくつかの行で発生した場合、私は「最後」ブロックにジャンプすることができますか?

+0

ようこそStackOverflow! – deeveeABC

+0

@deeveeABC:コードサンプルを追加 – blankRK

+0

誰かが助けてくれるのですか? – blankRK

答えて

0

ストリームを終了するには素晴らしい方法はありません。あなたは単に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)?を参照してください。

また、エラーをスローしてそれに応じてキャッチすることができます。

+0

それでは、コントロールがon(close)ブロックになるように、fast-csvでstream.destroy()を使用できますか? – blankRK

関連する問題