如何使用Javascript读取本地文本文件并逐行读取?

lit*_*hen 63 html javascript file

我有一个由html + javascript制作的网页,这是演示,我想知道如何读取本地csv文件并逐行读取,以便我可以从csv文件中提取数据.

jua*_*tas 89

没有jQuery:

document.getElementById('file').onchange = function(){

  var file = this.files[0];

  var reader = new FileReader();
  reader.onload = function(progressEvent){
    // Entire file
    console.log(this.result);

    // By lines
    var lines = this.result.split('\n');
    for(var line = 0; line < lines.length; line++){
      console.log(lines[line]);
    }
  };
  reader.readAsText(file);
};
Run Code Online (Sandbox Code Playgroud)

HTML:

<input type="file" name="file" id="file">
Run Code Online (Sandbox Code Playgroud)

请记住在呈现文件字段后放置您的javascript代码.

  • 我有200000行(不是开玩笑,它是一个日志文件).我不认为你的解决方案涵盖了那个,不过很好的尝试. (12认同)
  • 我们采用线路的外部文件的路径在哪里? (3认同)
  • @gsamaras我不记得确切,但是我使用了一些流,它逐段读取数据,然后在每次遇到\ n时发出事件。但是,如果有1亿行,您就会碰巧用HTML显示它们。 (2认同)

JuJ*_*oDi 18

使用ES6,javascript变得更加清晰

handleFiles(input) {

    const file = input.target.files[0];
    const reader = new FileReader();

    reader.onload = (event) => {
        const file = event.target.result;
        const allLines = file.split(/\r\n|\n/);
        // Reading line by line
        allLines.forEach((line) => {
            console.log(line);
        });
    };

    reader.onerror = (event) => {
        alert(event.target.error.name);
    };

    reader.readAsText(file);
}
Run Code Online (Sandbox Code Playgroud)

  • `const allLines = file.split(/\r\n|\n/);` - 这并不是真正的“逐行读取”。这会吞掉整个多千兆文件并令人窒息。 (6认同)
  • 更简单的正则表达式:\ r?\ n (4认同)
  • 很好的例子,我喜欢 Windows 和 Unix 风格的行尾处理。谢谢。 (3认同)
  • 用正则表达式投票赞成分割线,这是正确的方法。 (2认同)