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

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

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

Регистрация: Jun 2014
Сообщений: 52
По умолчанию Поиск и замена слова

Помогите, пожалуйста, решить такую проблему.
В текстовом поле нахожу слово и заменяю его. Но меняется также и часть другого слова, которое содержит в себе искомое. Как мне определить, что длина слова "круглый" не равна длине "круг" и поэтому замену в этом слове производить не нужно?
Код AS1/AS2:
much = 0;
t.text = "круг, круглый мяч";
arr = new Array("круг");
function changemain() {
	for (i=0; i<=t.text.length; i++) {
		var bin = t.text.indexOf(arr[0], much);
		var bon = bin+arr[0].length;
		much = bon;
		t.replaceText(bin, bon, "квадрат");
		much = 0;
	}
}
changemain();

Старый 27.06.2014, 07:41
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
С помощью регулярных выражений.
Вот тут чувак писал класс RegExp для AS2
Правда для русских букв его придется проапгрейдить, так как он рассчитан только на латиницу
__________________
Ко мне можно и нужно обращаться на ты)

Старый 27.06.2014, 11:29
razve вне форума Посмотреть профиль Отправить личное сообщение для razve Найти все сообщения от razve
  № 3  
Ответить с цитированием
razve
 
Аватар для razve

Регистрация: Jun 2014
Сообщений: 52
Спасибо за ответы!

Цитата:
Сообщение от caseyryan Посмотреть сообщение
Вот тут чувак писал класс RegExp для AS2
я новичок, не осилю, мне бы в примере dark256 разобраться)

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

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Вот. Не слишком элегантно, но отладил и работает.

Код AS1/AS2:
// Набор НЕбукв (включая пробел) 
var delimiters:Array = ",._ -+?(){}[]".split("")	
 
// Хэш-объект для проверки на принадлежность символа к разделителям без перебора 
// ВСЕХ описанных разделителей
var delHash:Object = new Object()
// Формируем хэш-объект
for ( var i=0; i<delimiters.length; i++ ) delHash[ delimiters[i] ] = true
 
 
// Проверка символа на принадлежность к разделителям
function charIsDelimiter( char ){
	if ( delHash[char] == true ) return false; else return true;
}
 
function searchAndReplace( src, from, to ){
 
	trace( "\n SOURCE STRING:"+src )
 
	var idx
	var pos = 0
	do
	{
		idx = src.indexOf( from, pos )
		if ( idx >=0 ){
			pos = idx+from.length
 
			var leftChar = false
			var rightChar = false
 
			// Проверяем крайние символы слова на разделители, если их индексы 
			// лежат в диапазоне граничных индексов строки
			if ( idx !=0 ) leftChar = charIsDelimiter( src.charAt( idx-1 ) )
			if ( idx+from.length != src.length ) rightChar = charIsDelimiter( src.charAt( idx+from.length ) )
 
			if ( !leftChar && !rightChar ) src = src.substr(0,idx)+to+src.substr(idx+from.length, src.length)
		}
	}
	while ( idx!=-1 )
        // Продолжаем поиск по строке, пока искомая сигнатура в ней не перестанет находиться
 
	trace( "RESAULT STRING:"+src )
}
 
 
var sourceText = "круг, круглый, __круг___кругляшок, округлый, (круг";
 
searchAndReplace( sourceText, "круг","квадрат" )
Код:
 SOURCE STRING:круг, круглый, __круг___кругляшок, округлый, (круг
RESAULT STRING:квадрат, круглый, __квадрат___кругляшок, округлый, (квадрат
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 27.06.2014, 11:58
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 5  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Не надо разбираться - бери да юзай.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 28.06.2014, 12:42
razve вне форума Посмотреть профиль Отправить личное сообщение для razve Найти все сообщения от razve
  № 6  
Ответить с цитированием
razve
 
Аватар для razve

Регистрация: Jun 2014
Сообщений: 52
Цитата:
Сообщение от dark256 Посмотреть сообщение
Не надо разбираться - бери да юзай.
Легко сказать) стоит поменять условия и у меня уже возникают проблемы.
Так работает.
Код AS1/AS2:
arr = new Array(['круг', ['квадрат']],['овал',['треугольник']]);
searchAndReplace(sourceText, arr[0][0], arr[0][1]);
А так почему-то нет.
Код AS1/AS2:
arr = new Array(['круг', ['квадрат']],['овал',['треугольник']]);
for (j=0; j<=sourceText.length; j++) {
		searchAndReplace(sourceText, arr[j][0], arr[j][1]);
}

Старый 04.07.2014, 19:11
razve вне форума Посмотреть профиль Отправить личное сообщение для razve Найти все сообщения от razve
  № 7  
Ответить с цитированием
razve
 
Аватар для razve

Регистрация: Jun 2014
Сообщений: 52
dark256, еще раз спасибо, вроде разобрался:
Код AS1/AS2:
var sourceText = "круг, круглый, __круг___кругляшок. округлый, (круг, овал овальный, полумесяц сфера, цилиндр цилиндрический, тор";
arr = new Array(['круг','овал','полумесяц'], ['сфера','цилиндр','тор']);
arrz = new Array(['квадрат','треугольник','прямоугольник'], ['пирамида','конус','параллепипед']);
var delimiters:Array = ",._ -+?(){}[]".split("");
var delHash:Object = new Object();
for (var i = 0; i<delimiters.length; i++) {
	delHash[delimiters[i]] = true;
}
function charIsDelimiter(char) {
	if (delHash[char] == true) {
		return false;
	} else {
		return true;
	}
}
function searchAndReplace() {
	trace("\n SOURCE STRING:"+sourceText);
	var idx;
	var pos = 0;
	for (i=0; i<=sourceText.length; i++) {
		for (j=0; j<=sourceText.length; j++) {
			do {
				idx = sourceText.indexOf(arr[i][j], pos);
				var r:Number = Math.floor(Math.random()*arrz[i].length);
				if (idx>=0) {
					pos = idx+arr[i][j].length;
					var leftChar = false;
					var rightChar = false;
					if (idx != 0) {
						leftChar = charIsDelimiter(sourceText.charAt(idx-1));
					}
					if (idx+arr[i][j].length != sourceText.length) {
						rightChar = charIsDelimiter(sourceText.charAt(idx+arr[i][j].length));
					}
					if (!leftChar && !rightChar) {
						sourceText = sourceText.substr(0, idx)+arrz[i][r]+sourceText.substr(idx+arr[i][j].length, sourceText.length);
					}
				}
			} while (idx != -1);
 
		}
	}
	trace("RESAULT STRING:"+sourceText);
}
searchAndReplace();
Добавлено через 64 часа 46 минут
Не получается( При перестановке в массиве, слово (например, "круг") не ищет.
Исходный массив:
Код AS1/AS2:
arr = new Array(['овал', 'круг' ,'полумесяц'], ['сфера','цилиндр','тор']);
Ни так:
Код AS1/AS2:
arr = new Array(['овал', 'круг' ,'полумесяц'], ['сфера','цилиндр','тор']);
Ни так:
Код AS1/AS2:
arr = new Array(['овал','полумесяц'], ['сфера','цилиндр','тор'],['круг']);

Старый 10.07.2014, 11:31
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 8  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Я, к сожалению, не могу до сих пор понять смысла подобных входных данных.......
Посомтреть код смогу только ближе к вечеру.
Пока опишите суть и смысл подобных массиово на входе...
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 10.07.2014, 14:56
razve вне форума Посмотреть профиль Отправить личное сообщение для razve Найти все сообщения от razve
  № 9  
Ответить с цитированием
razve
 
Аватар для razve

Регистрация: Jun 2014
Сообщений: 52
Код AS1/AS2:
arr = new Array(['круг','овал' ,'полумесяц'], ['сфера','цилиндр','тор']);
Смысл такой.
Найти в тексте все слова из arr[0] (это будут схожие по смыслу слова) и заменить их на рандомное слово из arrz[0], затем из arr[1] на arrz[1] и т.д.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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