node.js:将csv中的行读入数组

时间:2013-08-16 05:41:39

标签: node.js csv stream lazy-sequences

我想从大型csv文件中读取一些行。在SO上快速搜索,向我指出了'懒惰'模块。这是我的尝试:

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

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

1 个答案:

答案 0 :(得分: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);