我试图读取文件.csv
超过40 MB(有更多的20,000行),将其视为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);
});
是否有可能做一些事情,我优化我的代码,不让我的浏览器和打破我的文件被读取?我试着把文件拆开,然后封起来。(BLOB)但是这样他也一直让我的浏览器崩溃。(
(请原谅,如果我的问题不清楚和启发你,我的英语很差。)DEMO CODE JSFiddle
当我在我的研究中发现这个线程在解析器中解析一个非常大的CSV文件时,我想添加我的最终解决方案是使用Papa parse:
http://papaparse.com/