[英]How to save text file contents to Javascript variable?
I'm trying to read a text file of over 150,000 lines of text. 我正在尝试阅读超过150,000行文本的文本文件。 I want to be able to read the text file and pass it as a parameter for processFileContent. 我希望能够读取文本文件并将其作为processFileContent的参数传递。
I tried it this way, but it doesn't work. 我试过这种方式,但它不起作用。 Also, is there a better way to do this for such big data? 此外,对于这样的大数据,还有更好的方法吗?
function readFile(file) {
var reader = new FileReader();
reader.onload = function (evt) {
var data = evt.target.result;
};
reader.readAsText(file);
return data;
}
document.getElementById('file').addEventListener('change', readFile, false);
var data = readFile();
function processFileContent(data) {
var list = data.split('\n');
...
FileReader.onload
event returns results asynchronously. FileReader.onload
事件异步返回结果。 You can use a callback or Promise
to return result
of FileReader
to processFileContent
. 您可以使用回调或Promise
将FileReader
result
返回到processFileContent
。 Also file
at readFile
would be event
object, not .files
property of event.target
. readFile
file
也是event
对象,而不是event.target
.files
属性。
function readFile(event) {
var file = event.target.files[0];
if (file) {
new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onload = function (evt) {
resolve(evt.target.result);
};
reader.readAsText(file);
reader.onerror = reject;
})
.then(processFileContent)
.catch(function(err) {
console.log(err)
});
}
}
document.getElementById('file')
.addEventListener('change', readFile, false);
function processFileContent(data) {
var list = data.split('\n');
...
One of your problems is with scoping. 您的一个问题是范围界定。 You declared data
as a local variable in the onload
event handler, and tried returning it from the outer function, in which it was undefined
. 你宣布data
作为一个局部变量onload
事件处理程序,并试图从外部函数,在它被返回它undefined
。 To fix this, you need to move the variable declaration out of the event handler. 要解决此问题,您需要将变量声明移出事件处理程序。
You also are expecting a file as an argument to your event handler it seems, however events pass Event
objects to their event handlers. 您也期望将文件作为事件处理程序的参数,但是事件会将Event
对象传递给它们的事件处理程序。 To get the file, you need to get event.target.files[0]
. 要获取该文件,您需要获取event.target.files[0]
。 This should fix it. 这应该解决它。
function readFile(event) {
var file = event.target.files[0]; // getting the file Blob
var reader = new FileReader();
var data; // moved declaration
reader.onload = function (evt) {
data = evt.target.result;
};
reader.readAsText(file);
return data;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.