【发布时间】:2013-02-05 07:12:08
【问题描述】:
我正在使用带有 CoffeScript 的 Node.js 和 以下函数:
each_line_in = (stream, func) ->
fs.stat stream.path, (err, stats) ->
previous = []
stream.on 'data', (d) ->
start = cur = 0
for c in d
cur++
if c == 10
previous.push(d.slice(start, cur))
func previous.join('')
previous = []
start = cur
previous.push(d.slice(start, cur)) if start != cur
有没有更好的方法来做到这一点,而无需将整个文件读入 内存?“更好”是指更简洁、内置于 Node.js、更快或 更正确。如果我正在编写 Python,我会这样做:
def each_line_in(file_obj, func):
[ func(l) for l in file_obj ]
我看到this question 它使用Peteris Krumin's "lazy" module,但我想完成 这没有添加外部依赖项。
【问题讨论】:
-
当您说“遍历行”时,您的意思是“继续阅读直到您遇到
\n”还是“继续阅读直到您阅读了 10 个字符”(就像您的示例代码一样) ? -
上面的代码肯定不会在仅仅读取 10 个字符后停止。如果您尝试运行代码,您可能会看到“10”是换行符的 ASCII 字符。
标签: node.js coffeescript