JavaScript - записать файл в массив построчно

Как прочесть файл построчно и записать их в массив?


Ответы (2 шт):

Автор решения: vp_arth

Прочесть файл построчно невозможно. В файловых системах нет понятия строк в файлах.

Можно читать посимвольно и разбивать данные на строки при получении символов переноса строк(под переносом строк могут подразумеваться разные вещи: \r, \n, \r\n).

Можно прочитать файл целиком и уже потом разбить данные на строки..

Предположу, что речь идёт о nodejs, т.к. в контексте браузерного javascript не вполне определено, что значит прочесть файл.


Пример для текстового файла в utf8 c \n в качестве переносов:

const lines = fs.readFileSync('file.txt', 'utf8').split('\n');

Если файл большой, лучше воздержаться от синхронного чтения в пользу асинхронного


Интересное готовое решение(событие line) предлагает модуль readline:

const fs = require('fs');
const readline = require('readline');

function getFileLines(fn) {
  return new Promise((resolve, reject) => {
    const rl = readline.createInterface({
      input: fs.createReadStream(fn).on(err=>reject(err)),
      crlfDelay: Infinity
    });
    
    const lines = [];
  
    rl.on('line', line => lines.push(line));
    rl.on('close', () => resolve(lines));
    rl.on('error', err => reject(err))
  });
}

getFileLines('1.txt').then(lines => console.log(lines));
→ Ссылка
Автор решения: kvit_ko

@Andorey Rich, знаю что в Python есть функция open('nameFile.txt'), который может записать содержимое файла в переменную. Но чтобы в JavaScript было что-то подобное не встречал Если только вы не хотите прочесть файл с веб.страницы, которые будет запрашивать input()

<html>
<head>
<script>
  var openFile = function(event) {
    var input = event.target;

    var reader = new FileReader();
    reader.onload = function(){
      var text = reader.result;
      var node = document.getElementById('output');
      node.innerText = text;
      console.log(reader.result.substring(0, 200));
    };
    reader.readAsText(input.files[0]);
  };
</script>
</head>
<body>
<input type='file' accept='text/plain' onchange='openFile(event)'><br>
<div id='output'>
...
</div>
</body>
</html>
→ Ссылка