Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Генератор строк из столбцов (https://javascript.ru/forum/misc/58570-generator-strok-iz-stolbcov.html)

karakym 29.09.2015 14:20

Генератор строк из столбцов
 
Доброго времени суток, нужно сделать генератор строк, есть 3 поля (textarea) в каждом построчно написаны слова.
Так вот нужно сгенерировать все возможные комбинации этих слов, учитывая только очередь.
например:
в поле 1 написано: Коля, Вася, Витя
в поле 2 написано: Ушел, Пришел, Не было
в поле 3 написано: Домой, На работу, В отпуск
-----------Результат------------------
Коля Ушел Домой
Коля Пришел Домой
Коля Не было Домой
Коля Ушел На работу
Коля Пришел На работу
Коля Не было В отпуск
и так далее....
Вот не могу только понять как его реализовать?
Поделитесь небольшим примером!

ksa 29.09.2015 14:22

Цитата:

Сообщение от karakym
Вот не могу только понять как его реализовать?

Берешь строку...
Превращаешь ее в массив...
Случайно выбираешь элемент...
Вот из трех таких случайных элементов собираешь строку.

рони 29.09.2015 14:25

Цитата:

Сообщение от ksa
Случайно выбираешь элемент...

:stop:

karakym 29.09.2015 14:25

Цитата:

Сообщение от ksa (Сообщение 390158)
Берешь строку...
Превращаешь ее в массив...
Случайно выбираешь элемент...
Вот из трех таких случайных элементов собираешь строку.

Я понимаю, что таких наглецов-новичков на форуме хватает, но не могли бы вы сделать небольшой пример в коде.

ksa 29.09.2015 14:33

Цитата:

Сообщение от karakym
не могли бы вы сделать небольшой пример в коде

Нечто такое...

var name='Коля,Вася,Витя';
var action='Ушел,Пришел,Не было';
var target='Домой,На работу,В отпуск'
var str='';
str+=get(name);
str+=' '+get(action);
str+=' '+get(target);
alert(str);
function get(Str){
	var a=Str.split(',');
	var i=Math.floor(a.length*Math.random());
	return a[i];
};

ksa 29.09.2015 14:36

Цитата:

Сообщение от karakym
нужно сгенерировать все возможные комбинации этих слов, учитывая только очередь

Оказывается все нужны... :D
Тогда из строк делаем массивы... Те массивы в массив... И тремя циклами все это хозяйство выводим!

karakym 29.09.2015 14:42

Такой вот код вышел, но чет не пойму не работает.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Генератор</title>
</head>
<style>textarea{height:300px;padding:0;margin:0;width:100px;}.generate{width:308px;text-align:center;}.result{background:rgba(155,0,155,0.5)}</style>
<script type="javascript">
$('.generate').click(
    function generate(){
var name='Коля,Вася,Витя';
var action='Ушел,Пришел,Не было';
var target='Домой,На работу,В отпуск'
var str='';
str+=get(name);
str+=' '+get(action);
str+=' '+get(target);
alert(str);
function get(Str){
	var a=Str.split(',');
	var i=Math.floor(a.length*Math.random());
	return a[i];
};
})
</script>
<body>
<textarea class="gruz">
Коля
Вася
Витя
</textarea>
<textarea class="gorod">
Ушел
Пришел
Не было
</textarea>
<textarea class="avto">
Домой
На работу
В отпуск
</textarea><br/>
<input type="button" class="generate" value="СГЕНЕРИРОВАТЬ"/>
<div class="result"></div>
</body></html>

рони 29.09.2015 14:47

karakym,
Цитата:

Сообщение от ksa
Тогда из строк делаем массивы... И тремя циклами все это хозяйство выводим!


karakym 29.09.2015 14:54

Что не так сделал? Не работает!
var gruz = document.querySelector('.gruz'),
gorod = document.querySelector('.gorod'),
avto = document.querySelector('.avto'),
button   = document.querySelector('.generate');

button.onclick = function ()
	{
  var str = '';
str+=get(gruz);
str+=' '+get(gorod);
str+=' '+get(avto);
alert(str);
	var myList = str.split('\n');
	
	for (var i = 0, ln = myList.length; i < ln; ++i)
		alert(myList[i]);
	}

ksa 29.09.2015 14:55

Цитата:

Сообщение от karakym
Не работает!

Что-то такое...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
function test(){
	var arr=[
		document.getElementById('gruz').value.split(/\n/),
		document.getElementById('gorod').value.split(/\n/),
		document.getElementById('avto').value.split(/\n/)
	];
	var or=document.getElementById('result');
	for (var i=0; i<arr[0].length; i++) {
		for (var j=0; j<arr[1].length; j++) {
			for (var k=0; k<arr[2].length; k++) {
				var str=arr[0][i]+' '+arr[1][j]+' '+arr[2][k];
				or.innerHTML=or.innerHTML+str+'<br />';
			};
		};
	};
};
</script>
</head>
<body>
<textarea id="gruz">
Коля
Вася
Витя</textarea>
<textarea id="gorod">
Ушел
Пришел
Не было</textarea>
<textarea id="avto">
Домой
На работу
В отпуск</textarea>
<br/>
<input type="button" onclick='test();' class="generate" value="СГЕНЕРИРОВАТЬ"/>
<div id="result"></div>
</body>
</html>

karakym 29.09.2015 15:04

ksa,
Шайтанама!:write:
Спасибо, то что доктор прописал!:victory:

karakym 29.09.2015 15:55

А подскажите пожалуйста еще такую вещь:
в первом textarea есть 5 строк, но их не нужно комбинировать а просто чередовать!
Как это выполнить?

ksa 29.09.2015 16:13

Цитата:

Сообщение от karakym
в первом textarea есть 5 строк, но их не нужно комбинировать а просто чередовать!

Чем отличается чередование от комбинирования? :D

karakym 29.09.2015 16:25

ksa,
Ну смотри что я имею в виду:
1 строка: Коля, Вася, Витя
2 строка: Любит, Не любит
3 строка: Машу, Дашу, Иру
--------------------------------
Получится 18 комбинаций, а именно:
Цитата:

Коля Любит Машу
Коля Любит Дашу
Коля Любит Иру
Коля Не любит Машу
Коля Не любит Дашу
Коля Не любит Иру
Вася Любит Машу
Вася Любит Дашу
Вася Любит Иру
Вася Не любит Машу
Вася Не любит Дашу
Вася Не любит Иру
Витя Любит Машу
Витя Любит Дашу
Витя Любит Иру
Витя Не любит Машу
Витя Не любит Дашу
Витя Не любит Иру
Нужно что бы первая строка не создавалась для каждой Даши любит не любит а просто по очереди вставлялся текст:
Цитата:

Коля Любит Машу
Вася Любит Дашу
Витя Любит Иру
Коля Не любит Машу
Вася Не любит Дашу
Витя Не любит Иру
Коля Любит Машу
Вася Любит Дашу
Витя Любит Иру
Коля Не любит Машу
Вася Не любит Дашу
Витя Не любит Иру
Получится 12 комбинаций (по сути умножаем не на 3 строки а на одну, просто она подставляет Витю, Колю и Васю по очереди

ksa 29.09.2015 16:58

Цитата:

Сообщение от karakym
просто по очереди вставлялся текст:
Коля Любит Машу
Вася Любит Дашу
Витя Любит Иру
Коля Не любит Машу
Вася Не любит Дашу
Витя Не любит Иру
Коля Любит Машу
Вася Любит Дашу
Витя Любит Иру
Коля Не любит Машу
Вася Не любит Дашу
Витя Не любит Иру
Получится 12 комбинаций

Не совсем понял зачем дважды повторять одно и то же... :blink:

karakym 29.09.2015 17:05

Хорошо зайдем с другой стороны!
Представь что в первой строке только одно слово, например: "КоляВасяВитя" (а значит с ним будет только 12 комбинаций)
И нужно что бы первое слово каждой сточки было не "КоляВасяВитя", а по очереди для каждой строки Коля, Вася, Витя, Коля, Вася....
Если написать 4 строки в пером textarea, в результате будут вставляться по очереди, но комбинировать будет как буд то там одна строка!

karakym 29.09.2015 17:18

Расскажу поподробней:
Есть excel файл который будет импортирован в базу данных.
Есть строка "Название" для которого очень много позиций, и вот для автоматизации мне нужен такой скрипт.
Скрипт сделал все отлично.
В первом textarea мне нужно всего одно слово для комбинации, для других textarea их намного больше. Все хорошо генерирует, спасибо еще раз за скрипт. Но вот не задача, в первом textarea всего одно слово "Грузоперевозки", как то однотонно получается и хотелось бы, что бы слово менялось иногда (Хорошо бы по очереди, но можно и случайно) между словами "Перевозка груза, грузоперевозки и прочее", данный скрипт подставит мне слово Перевозка груза так, что у меня появятся лишние строки, но они совсем не нужны! Вот и бьюсь как рыба об лёд...

ksa 30.09.2015 08:18

Цитата:

Сообщение от karakym
в первом textarea всего одно слово "Грузоперевозки", как то однотонно получается и хотелось бы, что бы слово менялось иногда (Хорошо бы по очереди, но можно и случайно) между словами "Перевозка груза, грузоперевозки и прочее"

Так ты рандомно выбирай значение и будет тебе счастие...

karakym 30.09.2015 11:24

Теперь чет вообще ничего не работает!
function test(){
  var cols=0;
	var arr=[
		document.getElementById('gruz').value.split(/\n/),
		document.getElementById('gorod').value.split(/\n/),
		document.getElementById('avto').value.split(/\n/)
	];
  if ($('#chkgruz').is(':checked')) {
  var arr[0]=Math.floor(document.getElementById('gruz').value.split(', ').length*Math.random())
} else {
  
} 
	var or=document.getElementById('result');
	for (var i=0; i<arr[0].length; i++) {
		for (var j=0; j<arr[1].length; j++) {
			for (var k=0; k<arr[2].length; k++) {
				var str=arr[0][i]+' '+arr[1][j]+' '+arr[2][k];
        cols=cols+1;
				or.innerHTML=or.innerHTML+'<td>'+str+'</td>';
			};
		};
	};
  alert('Всего получилось '+cols+' позиций.');
};

ksa 30.09.2015 11:28

Цитата:

Сообщение от karakym
Теперь чет вообще ничего не работает!

Простая манипуляция со строками разных программ не всегда дает нужный результат... :D

karakym 30.09.2015 11:34

ksa,
Я добавил чекбокс и пытался к нему проверку добавить, если нажат, то рандомно будет первое поле иначе ничего не меняется.
Но что то пошло не так(

ksa 30.09.2015 11:45

karakym, дело в том, что твои задумки нужно правильно отображать в коде программы...
Просто так писать что-то не всегда дает нужный результат. Нужно четко понимать, что ты собрался сделать. И с чем ты в итоге работаешь.
Так же нужно научиться тестировать программки, дабы понять, что происходит там внутри...

karakym 30.09.2015 11:49

ksa,
Да вот дурная моя голова, когда предлагали курс javascrip я отказался, а щас даже и времени нет!
Я понимаю логику скриптов, вся проблема в синтаксисе!
что бы сделать подстановку по очереди можно например установить строчке в первом поле разделитель запятую для цикла будет считаться, что там одна строка а внутри цикл будет проверять переменную с количеством слов в этой же строчке разделенной запятыми и будет добавлять +1 и будет вставлять такое слово какое значение переменной

karakym 30.09.2015 14:08

ksa,
Помоги пожалуйста код составить!

laimas 30.09.2015 15:04

Цитата:

Сообщение от karakym
Есть excel файл который будет импортирован в базу данных.
Есть строка "Название" для которого очень много позиций


Импорт, это означает запись каждой записи в соответствующее поле таблицы базы. Следовательно при импорте о файле известно все. А коли известно и что-то не удовлетворяет, то и заменить не сложно. Кто же вам мешает описать массив значений ["грузит", "не грузит", "уже разгрузил"], перемешивая его, брать первый его элемент?

ksa 30.09.2015 15:04

karakym, я даже не понял, что тебе в итоге нужно... :no:

karakym 30.09.2015 16:27

ksa,
Нужно, что бы строки с первого поля не комбинировались с остальными, а просто подставлялись по очереди или случайным образом!

karakym 01.10.2015 10:55

В общем, как сделать, что бы строки с первого поля комбинировались с остальными как одна строка, просто случайно подменялись как варианты этой строки!?


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