如何将文本文件内容保存到Javascript变量?

时间:2016-09-18 02:58:05

标签: javascript filereader

我试图阅读超过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');
  ...

2 个答案:

答案 0 :(得分:0)

FileReader.onload事件以异步方式返回结果。您可以使用回调或Promiseresult FileReader返回processFileContentfile readFile event也是.files对象,而不是event.target的{​​{1}}属性。

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');
  ...

答案 1 :(得分:0)

您的一个问题是范围界定。您在data事件处理程序中将onload声明为局部变量,并尝试从外部函数返回它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;
}