如何在JavaScript中逐行读取文件?
我正在为iPad编写一个web应用程序,它将从文本文件加载数据。(样本数据集约为400 kb)。除了文件读取之外,我已经把一切都准备好了。按照我设置代码的方式,传递一个对象,该对象逐行读取文件 如何逐行读取文件如何在JavaScript中逐行读取文件?,javascript,ipad,file-io,Javascript,Ipad,File Io,我正在为iPad编写一个web应用程序,它将从文本文件加载数据。(样本数据集约为400 kb)。除了文件读取之外,我已经把一切都准备好了。按照我设置代码的方式,传递一个对象,该对象逐行读取文件 如何逐行读取文件 如果没有直接的方法逐行读取文件,有人能给我举一个如何将文件读入字符串对象的例子吗?(这样我就可以使用split方法:P)我认为这是不可能的,除非你使用ajax来处理服务器端的代码。如果我理解你想做什么,这是可行的: var txtFile = new XMLHttpRequest();
如果没有直接的方法逐行读取文件,有人能给我举一个如何将文件读入字符串对象的例子吗?(这样我就可以使用split方法:P)
我认为这是不可能的,除非你使用ajax来处理服务器端的代码。
如果我理解你想做什么,这是可行的:
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "http://website.com/file.txt", true);
txtFile.onreadystatechange = function()
{
if (txtFile.readyState === 4) { // document is ready to parse.
if (txtFile.status === 200) { // file is found
allText = txtFile.responseText;
lines = txtFile.responseText.split("\n");
}
}
}
txtFile.send(null);
MobileSafari没有这个功能,所以我想你说的是从网络资源中阅读。你不能那样做。当您通过ajax读取资源时,浏览器将首先将其完全读取到内存中,然后将整个字符串作为字符串传递给ajax回调 在回调中,您可以将字符串分成几行,并将其包装到一个对象中,该对象具有代码所需的API,但您仍然可以一次将字符串全部存储在内存中。使用jQuery:
myObject = {}; //myObject[numberline] = "textEachLine";
$.get('path/myFile.txt', function(myContentFile) {
var lines = myContentFile.split("\r\n");
for(var i in lines){
//here your code
//each line is "lines[i]"
//save in object "myObject":
myObject[i] = lines[i]
//print in console
console.log("line " + i + " :" + lines[i]);
}
}, 'text');
什么样的文件?从一个URL?从设备?一个纯文本文件。从URL开始就可以了。我发现了一个FileReader对象:。不幸的是,它读取整个文件,我不知道如何使用它。我认为这是可能的,如果这样一个对象存在并且做了我认为它做的事情(读取一个文件)。@Ryan:看到我的答案了吗
FileReader
是文件API的一部分,Mobile Safari不支持。400 kb的文件对于iPad内存来说合理吗?@Ryan:第一代iPad有256M=262656K的RAM。40万英镑不到这个数字的十分之二(~0.15%)。不过,我不知道移动Safari允许使用多少。你得试试看。当然,在阅读完字符串后,要小心不要复制太多…这更多的是分配给Mobile Safari的内存。许多应用程序极大地限制了分配给JS的内存。@Ryan:因此“我不知道Mobile Safari允许使用多少内存。”;-)它发送请求,而不是文件。目前尚未收到该文件。null
参数(在本例中可以省略)表示您不向服务器上载任何文件。@谢谢!它起作用了!我不得不重新整理我的程序,但我让文件读取开始工作。如何通过循环中的EOF一次读取一行?在我的代码中,该注释位于一个名为“myfunction()”的函数中,但当我运行它时,它会说“myfunction未定义?”这会起作用。但它确实需要JQuery,这是比较常见的,但它仍然是一个值得考虑的警告。我没有在那个项目中使用JQuery。