2013-08-16 52 views
0

我想从大型csv文件中读取一些行。在这里进行的快速搜索将我指向了“懒惰”模块。这是我的尝试:node.js:从csv读取行到数组

items = [] 
stream = fs.createReadStream src 
lazy(stream) 
    .lines 
    .skip(1) 
    .take(5) 
    .forEach((line)-> 
     items.push line.toString()) 
    .on('end', -> 
     console.log items) 

但它不打印任何东西。我错过了什么?

回答

0

'end'事件看起来并没有沿着链条发射出去。只有'data' and 'pipe' are

基于the definition of .join(),'pipe'似乎是lazy使用什么。

# ... 
    .forEach((line)-> 
     items.push line.toString()) 
    .on('pipe',() -> 
     console.log items) 

你也可以只使用.join()lazy自己的API:

# ... 
    .forEach((line)-> 
     items.push line.toString()) 
    .join(() -> 
     console.log items) 

旁注:你不一定需要自己收集items。您还可以使用.map()

lazy(stream) 
    .lines 
    .skip(1) 
    .take(5) 
    .map(item -> item.toString()) 
    .join((items) -> console.log items) 

或可能只是:

# ... 
    .map(String) 
    .join(console.log);