Как распарсить загруженный документ 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];
|
| Часовой пояс GMT +3, время: 03:35. |