微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在不打开文本文件的情况下获取文本文件中的行数?

我正在开发这个代码,在用户选择目录后,它会显示该位置包含的文件的表格及其详细信息(名称,类型,大小……).

目录可能包含许多文件.

我成功实现了这一目标.但是,我的问题是我想显示每个文件中的行数.我可以使用此JavaScript代码获取行数:

var reader = new FileReader();
var textFile = $("#file").get(0).files[0];
reader.readAsText(textFile);
$(reader).on('load',processFile);
/*And in processFile() i use this line to get the number of lines :*/
nbLines = (file.split("\n")).length;

上面的代码按预期工作,它给了我想要的东西,但如果所选目录中有这么多文件,它可能会很重要!

问题:有没有办法在不读取文本文件的情况下获取行数?

问候!

解决方法

如果不读取文件中的行数,则无法计算.运行代码的操作系统不会将行数存储为某种元数据.它们通常甚至不区分二进制文件和文本文件!您只需阅读文件并计算换行符即可.

但是,如果文件中包含大量行,则可以比现在更快地执行此操作.

这行代码是我担心的:

nbLines = (file.split("\n")).length;

在此处调用split会创建大量内存分配,每个文件对应一行.

我的预感是,在for循环中直接计算换行符会更快:

function lineCount( text ) {
    var nLines = 0;
    for( var i = 0,n = text.length;  i < n;  ++i ) {
        if( text[i] === '\n' ) {
            ++nLines;
        }
    }
    return nLines;
}

这会对没有任何内存分配的换行符进行计数,并且大多数JavaScript引擎都应该很好地优化此代码.

根据您想要解释的方式,您可能还希望根据文件是否以换行结束来稍微调整最终计数.但是不要在循环中做到这一点,之后再做.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐