 
			
				05.01.2022, 14:02
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.12.2018 
					
					
					
						Сообщений: 138
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Как распарсить загруженный документ 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");
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 14:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Katy93
			
		
	 | 
 
	| 
		у меня есть текстовый документ в которой записи располагаются в столбец
	 | 
 
	
 
 Скорее всего "построчно"...
 
	
 
	| 
		
			Сообщение от Katy93
			
		
	 | 
 
	| 
		Как мне эти данные распарсить, чтобы они стали отдельной переменной.
	 | 
 
	
 
 Опять не понятно... 
Приведи пример того что получаешь и пример того что собираешься получить...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 14:24
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
let text = "..." // Текст содержащий много строк
let lines = text.split('\n') // Массив каждый элемент - отдельная строка
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 14:54
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.12.2018 
					
					
					
						Сообщений: 138
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		let text = "..." // Текст содержащий много строк 
let lines = text.split('\n') // Массив каждый элемент - отдельная строка
	 | 
 
	
 
 Распарсить получилось, но вот преобразовать опять не выходит. Я думала, что получив отдельное число я смогу преобразовать экспоненциальную запись, а вместо этого когда я делаю преобразование, то выводятся изначальные данные из документа.
 
Содержание документа Object.txt
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		2.12151364375213E+0001 
-4.65241027215574E-0001 
1.24533965323114E+0001 
2.21470432354003E+0001 
-1.35650478231506E+0001 
5.17833965543514E+0001 
2.52214176162443E+0001 
-1.15183292003216E+0001 
3.76599590303214E+0001 
2.57543176121343E+0001 
-1.12383293127446E+0001
	 | 
 
	
 
 Вот пример:
 
//Функция для преобразования
    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);
            }
Возвращается, то же самое что и в документе.
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		2.12151364375213E+0001 
-4.65241027215574E-0001 
1.24533965323114E+0001 
2.21470432354003E+0001 
-1.35650478231506E+0001 
5.17833965543514E+0001 
2.52214176162443E+0001 
-1.15183292003216E+0001 
3.76599590303214E+0001 
2.57543176121343E+0001 
-1.12383293127446E+0001
	 | 
 
	
 
  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Katy93, 05.01.2022 в 14:56.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 15:00
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Katy93, 
 num = +lines[i]; 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 15:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.12.2018 
					
					
					
						Сообщений: 138
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		рони, так заработала.
 
for(var i = 0; i < lines.length; i++)
            {
                num = +lines[i];
                num = toFixed(num);
                console.log(num);
            }
Rise, т.е чтобы мой запрос стал синхронным, нужно добавить в "open", в конце false?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 19:16
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.12.2018 
					
					
					
						Сообщений: 138
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Удалось получить преобразованный список цифр, с плавующей точкой  как теперь их распределить между тремя массивами. Нужно сделать так, чтобы это происходила, через каждый три шага например в первый массив попали бы 1,4,7,10 строка, во второй массив 2, 5,8,11, в третий массив соотвественно 3, 6,9,12 строка.  
Вот пример список:
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		21.2151364375213 
-0.465241027215574 
12.4533965323114 
 
22.1470432354003 
-13.5650478231506 
51.7833965543514 
 
25.2214176162443 
-11.5183292003216 
37.6599590303214 
 
25.7543176121343 
-11.2383293127446 
12.5323293127446
	 | 
 
	
 
 И распределение по массивам:
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		1 массив 
21.2151364375213 
22.1470432354003 
25.2214176162443    
25.7543176121343 
2 массив 
-0.465241027215574 
-13.5650478231506 
-11.5183292003216 
-11.2383293127446 
3 массив 
12.4533965323114 
51.7833965543514 
37.6599590303214 
12.5323293127446
	 | 
 
	
 
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 20:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Katy93
			
		
	 | 
 
	| 
		Нужно сделать так, чтобы это происходила, через каждый три шага например в первый массив попали бы 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, ' '))
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось ksa, 05.01.2022 в 20:39.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 20:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Я бы сделал с помощью библиотеки 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;
}
 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				05.01.2022, 23:43
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Кандидат Javascript-наук 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.12.2018 
					
					
					
						Сообщений: 138
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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];
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |