簡體   English   中英

如何將文本文件內容保存到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事件異步返回結果。 您可以使用回調或PromiseFileReader result返回到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');
  ...

您的一個問題是范圍界定。 你宣布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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM