Как распарсить загруженный документ js, чтобы каждая строка стала переменной?
Здравствуйте, у меня есть текстовый документ в которой записи располагаются в столбец. Для загрузки я создала функцию LoadFromFile Для вывода использую req.responseText. Как мне эти данные распарсить, чтобы они стали отдельной переменной. Каждую строку мне дальше нужно пропустить через другую функцию? Вот мой код:
function LoadFromFile(FileName){ var req = new XMLHttpRequest(); req.open("GET", FileName); req.onreadystatechange = function() { if(req.readyState===4){ if(req.status===200){ console.log(req.responseText); } } } try { req.send(null); } catch (e) { alert(e.message); } } LoadFromFile("models/Object.txt"); |
Цитата:
Цитата:
Приведи пример того что получаешь и пример того что собираешься получить... |
let text = "..." // Текст содержащий много строк let lines = text.split('\n') // Массив каждый элемент - отдельная строка |
Цитата:
Содержание документа Object.txt Цитата:
//Функция для преобразования function toFixed(x) { if (Math.abs(x) < 1.0) { var e = parseInt(x.toString().split('e-')[1]); if (e) { x *= Math.pow(10,e-1); x = '0.' + (new Array(e)).join('0') + x.toString().substring(2); } } else { var e = parseInt(x.toString().split('+')[1]); if (e > 20) { e -= 20; x /= Math.pow(10,e); x += (new Array(e+1)).join('0'); } } return x; } function LoadFromFile(FileName){ var req = new XMLHttpRequest(); var data = "1"; req.open("GET", FileName); req.onreadystatechange = function() { if(req.readyState===4){ if(req.status===200){ let text = req.responseText // Текст содержащий много строк let lines = text.split('\n') // Массив каждый элемент - отдельная строка let num; for(var i = 0; i < lines.length; i++) { num = toFixed(lines[i]); console.log(num); } } } } try { req.send(null); } catch (e) { alert(e.message); } } Функция toFixed работает, если взять любое число из документа и добавить в toFixed, то выведится число со сдвигом запятой. Например, если прописать вот так. num = toFixed(2.12151364375213E+0001); console.log(num); Мы получим: 21.2151364375213 Если через цикл ничего не происходит. for(var i = 0; i < lines.length; i++) { num = toFixed(lines[i]); console.log(num); } Возвращается, то же самое что и в документе. Цитата:
|
Katy93,
num = +lines[i]; |
рони, так заработала.
for(var i = 0; i < lines.length; i++) { num = +lines[i]; num = toFixed(num); console.log(num); } Rise, т.е чтобы мой запрос стал синхронным, нужно добавить в "open", в конце false? |
Удалось получить преобразованный список цифр, с плавующей точкой как теперь их распределить между тремя массивами. Нужно сделать так, чтобы это происходила, через каждый три шага например в первый массив попали бы 1,4,7,10 строка, во второй массив 2, 5,8,11, в третий массив соотвественно 3, 6,9,12 строка.
Вот пример список: Цитата:
Цитата:
|
Цитата:
const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] const b = [] for (let i = 0; i < a.length; i++) { const j = i % 3 const k = Math.trunc(i / 3) if (!b[j]) b[j] = [] b[j][k] = a[i] } alert(JSON.stringify(b, null, ' ')) |
Я бы сделал с помощью библиотеки lodash:
zip(...chunk(arr, 3));Руками же это делается как-то так: function spread(arr, count = 3) { const result = Array.from({length: count}, () => []); for(let i = 0; i < arr.length;) { for(let j = 0; j < count; j++) { result[j].push(arr[i++]); } } return result; } |
ksa, да работает.
let text = req.responseText // Текст содержащий много строк let lines = text.split('\n') // Массив каждый элемент - отдельная строка let num; const arr1 = [] for(var i = 0; i < lines.length; i++) { const j = i % 3 const k = Math.trunc(i / 3) num = +lines[i]; num = toFixed(num); //console.log(num); if (!arr1[j]) arr1[j] = []; arr1[j][k] = num; } //var arr = JSON.stringify(b, null, ' '); var a = arr1[0]; var b = arr1[1]; var c = arr1[2]; |
Rise, сейчас пытаюсь использовать современную загрузку файла. В итоге у меня не получается загрузить документ. Вот пример кода:
function LoadFromFile() { let response = async function loadCities() { const response = await fetch( 'https://aperesso.github.io/low_poly_room/room.json' ); const cities = await response.json(); console.log(cities); } loadCities().catch((err) => { console.log('Ошибка! ', err); }); } Выдает ошибку: loadCities is not defined |
Цитата:
|
Katy93,
Здесь можешь посмотреть как ошибки обрабатывать. По твоему адресу запроса будет ошибка, потому что нужны разрешения. |
Цитата:
function LoadFromFile(FileName){ var req = new XMLHttpRequest(); var data = "1"; req.open("GET", FileName); req.onreadystatechange = function() { if(req.readyState===4){ if(req.status===200){ let text = req.responseText // Текст содержащий много строк let lines = text.split('\n') // Массив каждый элемент - отдельная строка let num; for(var i = 0; i < lines.length; i++) { num = toFixed(lines[i]); console.log(num); } } } } try { req.send(null); } catch (e) { alert(e.message); } } Он по крайне мере нормально запускается во всех браузерах. До этого я уже изучила достаточно объемный материал по JS и сейчас просто времени нет, чтобы разбираться в современных примерах получения данных из текстовых документов. |
Цитата:
|
Часовой пояс GMT +3, время: 11:33. |