节点CSV解析器,以异步方式流式传输,逐行读取,并能够暂停和恢复流

时间:2015-05-07 13:19:18

标签: javascript node.js parsing csv fs

我正在尝试查找CSV分析程序库或流转换库和CSV分析程序的组合,以便我根据请求(暂停和恢复)获取行。我已经找到了一些逐行读取流的例子,但是那些通常处理纯文本而不是CSV格式,所以除了自己编写CSV解析器之外,我无法用这些例子确定正确的行动方案。

对此的需求来自我正在创建的伪缓冲区,我需要以一种滚动的方式发送数据和接收回调数据。例如,如果我逐行读取csv数据的100行并通过HTTP请求发送,我希望能够暂停进入的记录流,直到其中一个返回回调数据,然后我想取消暂停流,并且只拉一条记录来替换收到回调的记录。

它有点令人费解,所以如果我需要更好地解释,请告诉我。

1 个答案:

答案 0 :(得分:0)

csv模块可以执行此操作。他们的examples page有这个简单的异步示例,其中包含您可以用作起点的流:

var csv = require('csv');

var generator = csv.generate({seed: 1, columns: 2, length: 20});
var parser = csv.parse();
var transformer = csv.transform(function(data){
  return data.map(function(value){return value.toUpperCase()});
});
var stringifier = csv.stringify();

generator.on('readable', function(){
  while(data = generator.read()){
    parser.write(data);
  }
});

parser.on('readable', function(){
  while(data = parser.read()){
    transformer.write(data);
  }
});

transformer.on('readable', function(){
  while(data = transformer.read()){
    stringifier.write(data);
  }
});

stringifier.on('readable', function(){
  while(data = stringifier.read()){
    process.stdout.write(data);
  }
});