如何将文本文件内容保存到 Javascript 变量?
How to save text file contents to Javascript variable?
我正在尝试读取超过 150,000 行文本的文本文件。我希望能够读取文本文件并将其作为 processFileContent 的参数传递。
我这样试过,不行。另外,对于这么大的数据,有更好的方法吗?
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
事件 returns 结果异步。您可以使用回调或 Promise
到 return result
或 FileReader
到 processFileContent
。另外 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');
...
您的问题之一是范围界定。您在 onload
事件处理程序中将 data
声明为局部变量,并尝试从外部函数返回它,其中它是 undefined
。要解决此问题,您需要将变量声明移出事件处理程序。
您似乎还希望将文件作为事件处理程序的参数,但是事件将 Event
对象传递给它们的事件处理程序。要获取文件,您需要获取event.target.files[0]
。这应该可以解决它。
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;
}
我正在尝试读取超过 150,000 行文本的文本文件。我希望能够读取文本文件并将其作为 processFileContent 的参数传递。
我这样试过,不行。另外,对于这么大的数据,有更好的方法吗?
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
事件 returns 结果异步。您可以使用回调或 Promise
到 return result
或 FileReader
到 processFileContent
。另外 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');
...
您的问题之一是范围界定。您在 onload
事件处理程序中将 data
声明为局部变量,并尝试从外部函数返回它,其中它是 undefined
。要解决此问题,您需要将变量声明移出事件处理程序。
您似乎还希望将文件作为事件处理程序的参数,但是事件将 Event
对象传递给它们的事件处理程序。要获取文件,您需要获取event.target.files[0]
。这应该可以解决它。
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;
}