Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.04.2012, 23:22
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 1  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
По умолчанию Замена слова в строке на случайное из списка.

Здравствуйте!
Есть строка "lorem ipsum dolor sit amet". Мне хотелось бы заменить программно "lorem" на случайное слово из списка ["NGasta!", "Kvata!", "Kvakis"]. То есть, чтобы на входе было "lorem ipsum dolor sit amet", на выходе "NGasta! ipsum dolor sit amet" или "Kvata! ipsum dolor sit amet" или "Kvakis ipsum dolor sit amet". Заранее спасибо!

Старый 19.04.2012, 23:30
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Код AS3:
var text:String = "lorem ipsum dolor sit amet";
var list:Array = ["NGasta!", "Kvata!", "Kvakis"];
text = text.replace(/lorem/g, list[int(Math.random() * list.length)]);
Если уверены, что lorem только один раз упоминается, то можно
Код AS3:
text = text.replace("lorem", list[int(Math.random() * list.length)]);

Старый 20.04.2012, 00:33
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 3  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
expl, спасибо большое! То что нужно!
Только вот я стал немного менять параметры и захотел изменить слово для замены просто на символ и это не привело ни к чему хорошему. Что нужно сделать, чтобы в тексте "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." заменить все точки на любое слово из списка? (Вместо
Код AS3:
text = text.replace(/lorem/g, list[int(Math.random() * list.length)]);
я использовал
Код AS3:
text = text.replace(/./g, list[int(Math.random() * list.length)]);
, но замена получилась некорректной)

Старый 20.04.2012, 00:48
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
text = text.replace(/\./g, list[int(Math.random() * list.length)]);
__________________
Reality.getBounds(this);

Старый 20.04.2012, 00:54
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 5  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Знание регулярок - сила! Пора бы мне уже за них взяться, а то позорюсь тут. Спасибо, Wolsh!

P.S. А! Совсем забыл важную деталь! Дело в том, что при замене хотелось бы, чтобы слово "lorem" менялось на случайное слово из списка, и это случайное слово каждый раз было случайным (необязательно разным, но случайным). То есть текст "lorem lorem lorem lorem lorem" должен превратиться в "Kvata! Kvata! NGasta! Kvakis NGasta!", например. Можно как-то подобное реализовать?

Хотя, наверное, можно вот так:
Код AS3:
for (var i:int = 0; i < text.length; i++) 
{
	text = text.replace(/lorem/, list[int(Math.random() * list.length)]);
}


Последний раз редактировалось gait; 20.04.2012 в 01:29.
Старый 20.04.2012, 01:38
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Обычно "неповторяющийся рэндом" как раз и делают на массивах. Принцип простой – после того как элемент массива был использован, он удаляется из массива (массив тут естественно временная копия исходного массива). Когда массив заканчивается, делаем новую копию. Также надо сделать проверку на совпадение последнего выпавшего элемента и нового, потому как алгоритм выше гарантирует неповторяемость только на протяжении одного "цикла", а на стыках возможны повторы (из новой полной копии массива может выпасть тот же элемент, который был последним единственным в предыдущем проходе).

Добавлено через 10 минут
Другой вариант – когда элемент удаляется из массива, он запоминается в переменной, а когда удаляется следующий элемент, этот сохраненный записывается в массив обратно. И хотя теоретически он может выпасть сразу на следующей итерации, он все-равно будет "отделен" другим элементом (1 0 1). Так же, как и с проверкой на "стыках".
__________________
Reality.getBounds(this);

Старый 20.04.2012, 02:00
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 7  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Хм, а я разве где-то писал про "неповторяющийся рэндом"?

Старый 20.04.2012, 02:02
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А как надо понимать
Цитата:
и это случайное слово каждый раз было случайным
?

Добавлено через 1 минуту
А, понял, сейчас все точки заменяются на одно и то же слово.
__________________
Reality.getBounds(this);

Старый 20.04.2012, 02:04
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 9  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Прощу прощения, если выразил мысль туманно. Там же дальше приписка в скобках.
Цитата:
(необязательно разным, но случайным)
В целом всё что нужно, я узнал. Тему, наверное, можно закрывать. Еще раз спасибо expl и Wolsh!


Последний раз редактировалось gait; 20.04.2012 в 02:06.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.