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

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

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

Регистрация: Aug 2002
Сообщений: 121
Отправить сообщение для Olesolo с помощью ICQ
Question Split строки по шаблону

доброе утро всем,
какой шаблон использовать чтобы разбить строку по точкам и запятым?
Например: "Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми."
Результат: "Вы можете выбрать иконку,", "характеризующую сообщение.", "Разделяйте теги запятыми."
пробовал split({.,}) не работает :\

Старый 11.11.2011, 13:32
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Решение "в лоб":
Код AS1/AS2:
var str:String = 'Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми,это важно.';
 
str = str.split(', ').join(','); //убираем из последовательностей ', ' пробел
str = str.split(',').join('###'); //заменяем все возможные ',' на спецсимвол ###
str = str.split('###').join(',###'); //возвращаем запятую перед спецсимволом ###
 
str = str.split('. ').join('.'); //убираем из последовательностей '. ' пробел
str = str.split('.').join('####'); //заменяем все возможные '.' на другой спецсимвол ####
str = str.split('####').join('.####'); //возвращаем точку перед другим спецсимволом ####
 
str = str.split('####').join('###'); //приводим все спецсимволы к одному виду
 
var arr:Array = str.split('###'); //бьем строку на результирующий массив
 
for (var i = 0; i < arr.length ; i++) 
{
    trace(arr[i]);
}
Решение учитывает и возможно пропущенные пробелы после запятых и точек.
Интересны были бы более оптимальные варианты, если кто-то даст.
__________________
Идите первым!


Последний раз редактировалось mooncar; 11.11.2011 в 13:39.
Старый 11.11.2011, 14:27
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 3  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Кстати не слишком тривиальная задачка. Можно слегка сделать более общее решение разве что.
Код AS1/AS2:
var STR =  "Вы можете перевести сумму, характеризующую степень помощи. Храните деньги в сбербанке.";
var REZ : Array = new Array();
 
function removeChars( input, shablon ){
	for ( var J=0; J<shablon.length; J++ ) input = input.split(shablon[J]).join("###");
	return input.split("###")
}
 
REZ = removeChars(STR,[", ",". ",",","."])
 
for ( var i=0; i<REZ.length; i++ ) trace( REZ[i])
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

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

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
На AS 3.0 есть метод replace для строки, а в as 2.0 - чтобы не писать кучу джоинов -
завести метод:
Код AS3:
String.prototype.replace = function(searchStr, replaceStr):String {	
    var arr:Array = this.split(searchStr);
    return arr.join(replaceStr);
};
__________________
Кодинг, багинг, алгоритминг. me @

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Мункар, это решение не "в лоб", а "в печень" =)
Даже если через split/join, то зачем же после ввода собственного спецсимвола вводить еще один, а потом менять его на что-то и еще раз на что-то.

А вобще - нужно юзать регекспы. Они не сложные, правда-правда.
Банально:

Код AS3:
var res:Array = text.split(/\.\s*|,\s*/);
Если нужно не терять точки и запятые, прийдется немного усложнить:

Код AS3:
var res:Array = text.split(/(.*?[\.|,])\s*/);
Но тогда в полученном массиве найденные элементы будут чередоваться с разделителями, т.е.:
Код:
0 :''
1 :'Вы можете выбрать иконку,'
2 :''
3 :'характеризующую сообщение.'
4 :''
5 :'Разделяйте теги запятыми.'
6 :''
Можно сделать немного иначе:
Код AS3:
var res:Array = text.split(/([\.|,])\s*/);
Получим вот такой массивчик:
Код:
0 :'Вы можете выбрать иконку'
1 :','
2 :'характеризующую сообщение'
3 :'.'
4 :'Разделяйте теги запятыми'
5 :'.'
6 :''
Ну и потом посклеиваем все, что нам надо.

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

Регистрация: Aug 2002
Сообщений: 121
Отправить сообщение для Olesolo с помощью ICQ
crazyone
решение ищется именно для AS2.0

Старый 11.11.2011, 16:17
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Olesolo, как вам мое решение?

dark256, у тебя условия задачки не выполнены, не сохраняются точки и запятые, они просто вырезаются, это как раз тривиально.

Цитата:
Сообщение от crazyone Посмотреть сообщение
Мункар, это решение не "в лоб", а "в печень" =)
Даже если через split/join, то зачем же после ввода собственного спецсимвола вводить еще один, а потом менять его на что-то и еще раз на что-то.
Затем, что по задаче автора нужно разрезать строку по месту и запятых и точек, причем нужно, чтобы они потом присутствовали на своих местах.
Я же указал все в комментариях, что там для чего делается.

1. Первый спецсимовл в моем решении возникает на месте последовательностей "запятая-пробел" и на месте "запятая", при этом образуется последовательность "запятая-спецсимвол-№1".
2. Второй спецсимовл появляется на месте последовательностей "точка-пробел" и на месте "точка", при этом образуется последовательность "точка-спецсимвол-№2".
Причем использовать тот же спецсимвол, что и в п.1 нельзя, поскольку предстоит еще обратная замена на точку, то есть точка-спецсимвол-№2 будут именно в месте второго спецсимовла.
3. И на третьем этапе идет подготовка на разбиение в массив, для этого спецсимвол №2 теперь уже можно заменить на спецсимвол №1, унифицировав разметку для разбиения, поскольку точки уже встали на свои места. И сделать наконец split.

Про регулярки я знал, но не силен в них.
__________________
Идите первым!


Последний раз редактировалось mooncar; 11.11.2011 в 16:43.
Старый 11.11.2011, 16:52
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 8  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Да, в AS2 с этим грустнее. Недосмотрел расположение темы.

Мункар, я говорил о том, что если сделать вот так, результат не поменяется, а сплит-джойнов будет меньше:
Код AS1/AS2:
var str:String = 'Вы можете выбрать иконку, характеризующую сообщение. Разделяйте теги запятыми,это важно.';
 
str = str.split(', ').join(','); //убираем из последовательностей ', ' пробел
str = str.split(',').join(',###'); //заменяем все возможные ',' на спецсимвол ,###
 
str = str.split('. ').join('.'); //убираем из последовательностей '. ' пробел
str = str.split('.').join('.###'); //заменяем все возможные '.' на другой спецсимвол .###
 
var arr:Array = str.split('###'); //бьем строку на результирующий массив
 
for (var i = 0; i < arr.length ; i++) 
{
    trace(arr[i]);
}

Старый 11.11.2011, 17:11
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ага, результат такой же, я тоже так собирался, только почему-то логика замен не получалась.
__________________
Идите первым!

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

Теги
pattern , split , шаблон

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

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


 


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


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