2013-08-16 50 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);