gpt4 book ai didi

javascript - 如何在不将文件内容加载到 JavaScript 内存的情况下知道文件中的行数?

转载 作者:行者123 更新时间:2023-11-30 21:17:50 25 4
gpt4 key购买 nike

简介:
一个将加载 CSV 文件的系统,但它们预计会巨大(+1M 行)。我已经知道如何使用队列和后台作业/任务来处理它们。

但是,
我想向用户显示他的文件的进度,某行:2165 of 1246875 或者它的百分比。要存档此文件,我需要知道文件中的行数,但我必须在不将其内容加载到内存的情况下执行此操作,因此它可以很快,一旦我上传并可以将文件名保存在其中包含总行数。

在 PHP 中这是可能的 使用 SplFileObject 尝试 seek()PHP_MAX_INT,然后它会到文件中的最高行,key() 返回该行。

但是系统完全是用 JavaScript/Node.js 构建的,所以为了方便起见,我也想用 JavaScript 构建这个系统部分。

我怎样才能做到这一点? 已经看过 FS API , 但没有找到如何做到这一点。

[编辑]
到目前为止的想法:

  1. child_process.exec + wc -l(仅限 Unix)
  2. 使用 FileReader 从客户端获取此信息(将资源委托(delegate)给用户)

最佳答案

这是不可能的。

行是关于文件的人类概念。对于计算机来说,文件只是一堆字节;你可以知道总字节数,你可以寻找字节长度,但是知道这个字节有多少行涉及计算换行符,计算换行符涉及读取它们。

wc 和 PHP 的 SplFileObject 都对整个文件进行流处理,它们并不施展魔法。所以最好的答案是哪种方法以最有效的方式做到这一点。这意味着,哪种 GC 会运行得更好。

另一方面,如果准确性不是要求,您可以尝试猜测。如果所有行都有固定的字节长度,您可以将它除以文件的总字节数。或者,作为 pointed by Aikon ,您可以只读取几个字节(它们分成几行)得到它们的平均长度并除以文件的总字节数。

虽然它将文件内容带到内存中,Joel Lord answer 是 Node.js 解决方案的答案。你也可以看看readline module .

关于javascript - 如何在不将文件内容加载到 JavaScript 内存的情况下知道文件中的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45491603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com