JavaScript - записать файл в массив построчно
Как прочесть файл построчно и записать их в массив?
Ответы (2 шт):
Прочесть файл построчно невозможно. В файловых системах нет понятия строк в файлах.
Можно читать посимвольно и разбивать данные на строки при получении символов переноса строк(под переносом строк могут подразумеваться разные вещи: \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));
@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>