Làm thế nào để sử dụng Javascript để đọc tệp văn bản cục bộ và đọc từng dòng?


83

Tôi có một trang web được tạo bằng html + javascript là bản demo, tôi muốn biết cách đọc tệp csv cục bộ và đọc từng dòng để tôi có thể trích xuất dữ liệu từ tệp csv.


2
Kiểm tra điều này, hãy xem html5rocks.com/en/tutorials/file/dndfiles
Hunter Larco

2
bạn có yêu cầu nào về khả năng tương thích của trình duyệt không? cụ thể là bạn có hỗ trợ ie9 hoặc ít hơn không?
Không được yêu thích


@HunterLarco cảm ơn bạn, vấn đề là mình không biết cách lấy từng dòng từ kết quả. Ý tôi là reader.readAsText () trả về tất cả dữ liệu thay vì tôi có thể đọc từng dòng một
litaoshen

@LukeMcGregor Không cần yêu cầu, chỉ cần hỗ trợ các phiên bản hiện tại là được.
litaoshen

Câu trả lời:


114

Không có 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);
};

HTML:

<input type="file" name="file" id="file">

Hãy nhớ đặt mã javascript của bạn sau khi trường tệp được hiển thị.


19
Tôi có 200000 dòng (không đùa, đó là một tệp nhật ký). Tôi không nghĩ rằng giải pháp của bạn bao gồm điều đó, hãy thử.
Tomáš Zato - Phục hồi Monica

Ngoài ra, giải pháp này không xử lý nếu trả về đó (nguồn cấp dòng) nằm trong trường được trích dẫn. Đối với Tomas, nếu bạn có một trình duyệt tiên tiến hơn, bạn có thể sử dụng trình tạo để đọc từng dòng mà không cần thực hiện "tách".
Rahly

5
đâu là đường dẫn cho tệp bên ngoài mà chúng ta đi dòng?
abidinberkay

@ TomášZato mỏ là 100m đường. Mặc dù vậy, tôi vẫn chưa thử nghiệm câu trả lời đó .. Bạn đã tiếp cận câu trả lời đó như thế nào? Một liên kết đến một ví dụ sẽ được đánh giá cao! huanPastas, +1 cho câu trả lời!
gsamaras

2
@gsamaras Tôi không nhớ chính xác nhưng tôi đã sử dụng một số luồng đọc dữ liệu từng mảnh và sau đó là sự kiện giới hạn cho mỗi lần tôi gặp phải \n. Nhưng với 100m dòng, bạn sẽ gặp phải việc hiển thị chúng trong HTML.
Tomáš Zato - Phục hồi Monica

37

Sử dụng ES6, javascript trở nên gọn gàng hơn một chút

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);
}

3
đã bình chọn cho các dòng tách với regex, đó là cách làm đúng.
Meysam Feghhi

12
Đơn giản hơn regexp:\r?\n
thúc

1
Ví dụ tuyệt vời và tôi thích rằng phần cuối dòng kiểu Windows và Unix được xử lý. Cảm ơn bạn.
Brad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.