Як використовувати Javascript для читання локального текстового файлу та читання рядків за рядком?


85

У мене є веб-сторінка, створена за допомогою html + javascript, яка є демонстраційною, я хочу знати, як читати локальний файл csv та читати рядок за рядком, щоб я міг витягувати дані з файлу csv.



2
чи є у вас вимоги до сумісності з браузером? конкретно, чи підтримуєте ви ie9 чи менше?
Не любив


@HunterLarco дякую, проблема в тому, що я не знаю, як отримати кожен рядок із результату. Я маю на увазі reader.readAsText () повертає всі дані замість того, щоб я міг читати рядок за рядком
litaoshen

@LukeMcGregor Ніяких вимог, лише підтримка поточних версій буде в порядку.
litaoshen

Відповіді:


117

Без 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">

Не забудьте вставити код JavaScript після того, як поле файлу відтворено.


21
У мене є 200000 рядків (не жартую, це файл журналу). Я не думаю, що ваше рішення охоплює це, хоча приємно спробувати.
Томаш Зато - відновити Моніку

Крім того, це рішення не обробляє, якщо повернення (подача рядка) знаходиться в цитованому полі. Що стосується Томаша, якщо у вас є вдосконалений браузер, ви можете використовувати генератор для читання рядків за рядком, не роблячи "розбиття".
Рахлі

5
де шлях до зовнішнього файлу, в якому ми беремо рядки?
abidinberkay

@ Шахта TomášZato - 100 метрів. Я ще не перевірив цю відповідь, хоча .. Як ви підійшли до цього? Посилання на приклад буде надзвичайно вдячне! huanPastas, +1 за відповідь!
gsamaras

2
@gsamaras Я точно не пам'ятаю, але я використав якийсь потік, який зчитує дані поштучно, а потім випромінює подію кожного разу, коли я стикався \n. Але зі 100-метровими рядками ви зіткнетеся з таблицею з відображенням їх у HTML.
Томаш Зато - відновити Моніку

37

Використовуючи 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);
}

3
проголосував за розділені лінії з регулярним виразом, що є правильним способом зробити це.
Meysam Feghhi

13
Простіший регулярний вираз:\r?\n
закінчення

1
Чудовий приклад, і мені подобається, що обробляються закінчення рядків у стилі Windows та Unix. Дякую.
Бред
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.