Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сделать из строки нумерованный массив (https://javascript.ru/forum/dom-window/72596-sdelat-iz-stroki-numerovannyjj-massiv.html)

den2412 11.02.2018 15:09

Сделать из строки нумерованный массив
 
Всем Привет. Такая проблема: Есть файл txt который имеет вид
0 Денис
1 Вася
2 Лина
3 Джек
4 Оля
5 Люся
6 Настя
7 Джони
С помошью JS кода легко получается прочитать и вывести на экран как текст. Но никак не могу сделать из него массив, который имел бы такой же вид, т.е.
var array = [0 Денис
1 Вася
2 Лина
3 Джек
4 Оля
5 Люся
6 Настя
7 Джони];
Можно добавить разделители типа (, : или ;), главное чтобы при обращении array[4] показывало "Джек".

HTML:
<body>
<input type="file" id="file_load" multiple="">
<input type="button" value="READ" onclick="read()">
<input type="button" value="Show" onclick="show_arr()">
<div id="file_div"></div>
</body>

javascript:
var a;
function read() { // здесь проблем нет, файл читает и выводит
var file = document.getElementById('file_load').files[0];
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function () {
a = document.getElementById('file_div').innerHTML = reader.result;
};
}

function show_arr() {
var arr_a = a.split(b); // пытаюсь разбить массив на номер и пробел за ним
var b = i + ' ';
for (var i = 0; i < arr_a.length; i++) {
}
document.getElementById('show_sub').innerHTML = arr_a[2]; //ничего не выводиться
}
Как сделать чтобы выводило "Лина".

laimas 11.02.2018 15:48

den2412,
для этого не обязательно нумеровать строки в файле, достаточно чтобы каждое имя было с новой строки

var name = 'Денис\r\nВася\r\nЛина\r\nДжек';

alert(name.split(/\r?\n/)[1])


Перевод строки зависит от системы, это может быть \n или \r\n

den2412 11.02.2018 16:41

Спасибо за столь быстрый ответ. Вот только что делать если файл содержит больше 1000 имен, не удалять же все цифры вручную.

laimas 11.02.2018 16:46

Цитата:

Сообщение от den2412
Вот только что делать если файл содержит больше 1000 имен

Файл в помойку и использовать базу, тогда и проблем не будет, и разбивать строки на массив не потребуется.

MC-XOBAHCK 11.02.2018 16:51

<input type="file" id="file_load" multiple="">
<input type="button" value="READ" onclick="read()">
<input type="button" value="Show" onclick="show_arr()">
<div id="file_div"></div>
<div id="show_sub"></div>


<script>
var a;
function read() { // здесь проблем нет, файл читает и выводит
	var file = document.getElementById('file_load').files[0];
	var reader = new FileReader();
	reader.readAsText(file);
	reader.onload = function () {
		a = document.getElementById('file_div').innerHTML = reader.result;
	};
}

function show_arr() { 
	var a = document.getElementById('file_div').innerHTML;
	console.log(a);
	var arr_a = a.split('\n');
	document.getElementById('show_sub').innerHTML = arr_a[2];
}
</script>

Aetae 11.02.2018 16:54

function parseNameList(string){
  var regexp = /^\s*(\d+)\s*(.*)\s*$/mg, match, result = [];
  while(match = regexp.exec(string))
    result[+match[1]] = match[2];
  return result
}

parseNameList(`
  0 Денис
  1 Вася
  2 Лина
  3 Джек
  4 Оля
  5 Люся
  6 Настя
  7 Джони
`)

den2412 11.02.2018 17:00

Огромное спасибо!!! Чет даже и не подумал \n использовать. JavaScript неделю изучаю, опыта пока не хватает. Спасибо всем кто помогал. Тему можно закрыть :)


Часовой пояс GMT +3, время: 07:33.