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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.07.2012, 19:24
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию преобразование строки в массив ( не тривиально)

Есть у нас вот такая строка например
Код:
"a b с 1 '1233434 GIVE IT' 'DO IT 15'"
Нужно создать массив. Я так понимаю регэкспы? Но что то не приходит в голову решение...
Массив соотв такой должен получится
Код:
[0] = a
[1] = b
[2] = c
[3] = 1
[4] = '1233434 GIVE IT'
[5] = 'DO IT 15'
__________________
Марк Tween

Старый 04.07.2012, 19:37
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
RegExp#match();
/(.*) (.*) (.*) (.*) ('.*') ('.*')/
Это только под конкретную задачу.
И нужно удалить из полученного массива нулевой элемент.
__________________
тут я

Старый 04.07.2012, 20:04
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Если задача общая, варианта 2:
- углубляемся в регулярки
- пишем свой парсер на базе машинки состояний
Парсер читает строку посимвольно, реализация машинки - свичами (другие способы слишком неэффективны)
Состояния здесь такие:

1. Ждем символ/цифра или открывающую кавычку
если символ/цифра - переходим в 2
если открывающая кавычка - переходим в 3
если пробел - ничего не делаем, идем к следующему символу

2. Ждем пробел (набиваем попутно текущую строку)
если кавычка - вываливаемся с ошибкой
если символ/цифра - набиваем строку
если пробел - добавляем строку в массив, переходим в 1

3. Ждем закрывающую кавычку
если символ/цифра - набиваем строку
если кавычка - добавляем строку в массив, переходим на 1
По завершении строки надо добавить последнюю набитую строку в массив.

Примерно так.

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
split по кавычке, потом идём по этому массиву, чётные индексы(0й, 2й) будут вне кавычек, нечётные (1й 3й) будут то что в ковычках, соотственно чётные ещё раз сплитим по пробелу, нечётные так пашим.
__________________
:)

Старый 04.07.2012, 20:12
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Блин это жутко сложно))) я думал варианты по проще есть)))

Саня, а что значит для конкретной в данном случае? Строки могут быть любыми, но задача всегда такая, что есть внутри строки с пробелами
__________________
Марк Tween

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Регулярка работает только для строки вида как ты написал. В кавычках могут быть строки из многих слов. А то, что вне кавычек - то обязательно по одному слову.
__________________
тут я

Старый 04.07.2012, 20:26
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Блин это жутко сложно))) я думал варианты по проще есть)))
Это про что? Про сплит четных/нечетных или про машину состояний?

Как бы написать цикл, бегущий побуквенно по строке и в нем свитч из 3-х case-ов - ИМХО самое тупое что может прийти в голову, если не считать себя супер-гуру, который обязан пользоваться регулярками.

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Код AS3:
var s:String = "a b с 1 '1233434 GIVE IT' 'DO IT 15'";
var arr1:Array = s.split("'");
var result:Array = new Array;
for (var i:int=0; i < arr1.length; i++) {
	if (i%2) result.push(arr1[i]);
	else result = result.concat((arr1[i] as String).split(" "));
}
trace(result);
только пустые строки выкинуть и всё

Добавлено через 32 секунды
Код:
a,b,с,1,,1233434 GIVE IT,,,DO IT 15,
Добавлено через 13 минут
если кавычка одна может встречаться в слове
Код:
"a bdssd'dsfsdf с 1 '1233434 GIVE IT' 'DO IT 15'"
и bdssd'dsfsdf далжно быть выделено отдельно, то только конечный атомат, очень легко и удобно.
__________________
:)


Последний раз редактировалось Aquahawk; 04.07.2012 в 20:43.
Старый 04.07.2012, 20:46
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Сорри строки оказались сложнее вместо кавычек могут быть и [ ] и {} . Поэтому вариант не пройдет
__________________
Марк Tween

Старый 04.07.2012, 20:47
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 10  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
ну что я могу сказать, конечный автомат
__________________
:)

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

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

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


 


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


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