javascript - 如何使用 FileReader API javascript,仅 html/jquery 读取非常大的文件 .csv

标签 javascript jquery

我正在尝试读取超过 40 MB(超过 20.000 行)的文件 .csv,将其视为 html 表格。我正在设计的系统将仅采用纯 HTML + JQuery。 我的工作表 .csv 格式是:

=======================================================================
| rank ||  place           || population ||    lat    ||      lon     |
=======================================================================
|  1   || New York city    ||  8175133   || 40.71455  ||  -74.007124  |
-----------------------------------------------------------------------
|  2   || Los Angeles city ||  3792621   || 34.05349  ||  -118.245323 |
-----------------------------------------------------------------------
..........................Thousands of lines..........................

我有一个文本框过滤器,它让我只显示在字段中输入了相同数字的行。我有一个文本框过滤器,让我只显示在字段中输入相同数字的行。然后上传文件会破坏浏览器。 :( 按照我的代码:

var fileInput = document.getElementById('fileInput');
var fileDisplayArea = document.getElementById('fileDisplayArea');

        fileInput.addEventListener('change', function(e) {
            var file = fileInput.files[0];

                var reader = new FileReader();

                reader.onload = function(e) {

                    //Convert .csv to table html
                    var data = reader.result; 
                    var rank = $("#rank").val(); 

                    if(rank == ""){
                        alert("digit rank number");
                        fileInput.value = "";
                     }
                     else{



                    data = data.replace(/\s/, " #"); 
                    data = data.replace(/([0-9]\s)/g, "$1#"); 
                    var lines = data.split("#"), 
                        output = [],
                        i;
                        for (i = 0; i < lines.length; i++)
                        output.push("<tr><td>" + lines[i].slice(0,-1).split(",").join("</td><td>") + "</td></tr>");
                        output = "<table>" + output.join("") + "</table>";

var valuefinal = $(output).find('tr').filter(function(){ 
    return $(this).children('td').eq(0).text() == rank;
});

 $('#fileDisplayArea').append(valuefinal);

                     }
                }

                reader.readAsBinaryString(file);    


        });

是否可以做一些事情来优化我的代码,而不是让我的浏览器破坏我的文件以供读取? 我试着把文件分成几 block ,然后密封起来。 (BLOB)但是这样他也一直让我的浏览器崩溃。 :(

(如果我向您提出的问题不清楚和启发,请原谅,我的英语不好。) <强> DEMO CODE JSFiddle

最佳答案

当我在研究中发现这个线程在解析器中解析一个非常大的 CSV 文件时,我想补充一点,我的最终解决方案是使用 Papa Parse:

http://papaparse.com/

关于javascript - 如何使用 FileReader API javascript,仅 html/jquery 读取非常大的文件 .csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356591/

相关文章:

javascript - Webpack-dev-server 不会在更改时构建文件

javascript - 如何将动态输入字段提交到数据库中?

javascript - 计算在输入字段中接受空格

javascript - 从 Angular 中的 ngList 中删除项目

javascript - 检查几个值是否为数字

javascript - JQuery 'Jcarousel' 插件错误,需要帮助

javascript - DOM 刷新后使用 jQuery 测量宽度()

jquery - 使用 jQuery 的日期选择器

javascript - 点击链接标签播放音效

javascript - jquery ajax 发布到自己不起作用