Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   фильтр для строк (http://www.flasher.ru/forum/showthread.php?t=209501)

warsem 16.11.2014 15:55

фильтр для строк
 
Привет всем,

Интересует следующее: Есть ли в AS3 какие-то готовые тулзы для анализа строки?
Надо проверить состоит строка из разрешённых символов или там есть лишние символы.

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

zCHESNOKz 16.11.2014 15:59

Работа с символами в строках

warsem 16.11.2014 16:12

ну я про это и говорю: тут тоже проходишь всю строку по символам. А я интересуюсь, есть ли встроенная функция, которая будет делать тоже самое, что делает моя самодельная функция.

А тобишь: проверять, состоит строка из разрешенных символов или там есть левые.

dimarik 16.11.2014 16:40

http://help.adobe.com/en_US/as3/dev/...80cb-7ff6.html

Wolsh 16.11.2014 16:42

http://help.adobe.com/ru_RU/FlashPla.../3/RegExp.html

Gerbert 16.11.2014 16:51

Цитата:

хочется более красивого решения
Лично для меня методы реализуемые классом String, самое красивое решение.
Мне больше нравится потренироваться перебирая строку со сложным условием
в цикле, чем при помощи "элегантного" RegExp.

nubideus 16.11.2014 19:09

задача отфильтровать все символы в строке, которых нет в chars
Код AS3:

//задротство
var chars:String = "abc";
var str:String = "acdbag";
 
var resultStr:String = "";
 
var startSlice:uint = 0;
m: for (var i:uint = 0; i < str.length; i++ ) {
        var char:String = str.charAt(i);
        for (var j:uint = 0; j < chars.length; j++ ) {
                var goodChar:String = chars.charAt(j);
                if (char === goodChar) {
                        continue m;
                }
        }
        if (i - startSlice > 0) {
                resultStr += str.slice(startSlice, i);
        }
        startSlice = i + 1;
}
resultStr += str.slice(startSlice);
trace(resultStr); // acba

VS
Код AS3:

//функциональное задротство
var chars:String = "abc";
var str:String = "acdbag";
 
var resultStr:String = str.split("").filter(function(char:String, ...args):Boolean {
        return chars.split("").some(function(goodChar:String, ...args):Boolean {
                return char === goodChar;
        });
}).join("");
trace(resultStr); // acba

VS
Код AS3:

var str:String = "acdbag";
trace(str.replace(/[^abc]/g, "")); // acba


Gerbert 16.11.2014 19:21

А я считаю, что обожествление последнего варианта и приводит к задротским примерам выше.
Вы исполнили их задротски. И это задротство будет приследовать Ваш код по всюду.
И отрицать это бесполезно, так как задротство оно везде.

nubideus 16.11.2014 19:47

Цитата:

А я считаю, что обожествление последнего варианта и приводит к задротским примерам выше.
Вы исполнили их задротски. И это задротство будет приследовать Ваш код по всюду.
И отрицать это бесполезно, так как задротство оно везде.
што

кто обожествляет регекспы? у них только один плюс - быстро пишутся.
их невозможно читать[ и отлаживать], и возможности у них ограничены.

> Вы исполнили их задротски.
а как же практика?
> Мне больше нравится потренироваться перебирая строку
какой смысл писать это:
Код AS3:

var chars:String = "abc";
var str:String = "acdbag";
 
var resultStr:String = "";
 
m: for (var i:uint = 0; i < str.length; i++ ) {
        var char:String = str.charAt(i);
        for (var j:uint = 0; j < chars.length; j++ ) {
                if (char === chars.charAt(j)) {
                        resultStr += char;
                }
        }
}
trace(resultStr); // acba

мне это писать не интересно и нудно. слишком неэффективный код в плане чтения, писания, смысловой нагрузки, практики 0. а вот в первом варианте я делаю всего три конкатенации.

Цитата:

И это задротство будет приследовать Ваш код по всюду.
да спасет меня code review

Добавлено через 8 минут
ну а вообще, простые задачи нужно решать просто. а в конкретном случае регэксп самое простое решение.

Gerbert 16.11.2014 21:08

Цитата:

кто обожествляет регекспы? у них только один плюс - быстро пишутся.
Ну я тогда боюсь с Вами продолжать общаться, так как не понимаю Вас.
Если бы я написал коммент к коду, что это задротство, то это бы означало, что это плохо.

А дальше что творится? Вы трезвый?
Цитата:

кто обожествляет регекспы? у них только один плюс - быстро пишутся.
их невозможно читать[ и отлаживать], и возможности у них ограничены.
А после Вашего кода выполняющего сортировку, Вы говорите -
Цитата:

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

Цитата:

какой смысл писать это:
Вы понимаете, что это у Вас оно ЭТО? Я тоже не вижу смысла писать ЭТО.
Но все дело в том, что написания ЭТОГО говорит о том, что у Вас существуют двери,
которые Вы ещё не открывали. И при чем это одни из самых первых дверей.

nubideus 16.11.2014 22:16

Gerbert,

Цитата:

Цитата:

Цитата:

обожествление последнего варианта
кто обожествляет регекспы? у них только один плюс - быстро пишутся.
Ну я тогда боюсь с Вами продолжать общаться, так как не понимаю Вас.
что ты не понимаешь? ты сказал что я обожествляю регекспы. я этого не делал.

Цитата:

Цитата:

их невозможно читать[ и отлаживать]
Вы трезвый?
ахаха. смешно.
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Цитата:

после Вашего кода выполняющего сортировку
..
какую сортировку?


Цитата:

А дальше вообще говорите о каком-то первом варианте.
а что тогда означало твои "последнего варианта"?

Цитата:

Вы понимаете, что это у Вас оно ЭТО? Я тоже не вижу смысла писать ЭТО.
Но все дело в том, что написания ЭТОГО говорит о том, что у Вас существуют двери,
которые Вы ещё не открывали. И при чем это одни из самых первых дверей.
ну, в этом можно конечно найти смысл, но я этого делать не буду и напишу просто "что ты говоришь что ты блин говоришь ты замолчи замолчи и не пиши такую херню".
если просишь меня писать яснее, будь добр - сам пиши нормально. пока очень похоже что ты пытаешься затраллить

Gerbert 16.11.2014 22:26

Уверяю, тралить я Вас даже бы за деньги не стал.
Я прекращаю, так как не хочу показывать места, где Ваш код
и соответственно, логика построения чего-либо, хромает.

nubideus 16.11.2014 23:20

Gerbert, лучше предложи свое решение проблемы в 7 посте, если такой умный

Wolsh 17.11.2014 00:35

Пишите по делу, не переходя на личности.
Обсуждайте код, а не друг друга.

warsem 17.11.2014 11:31

я свою "задротину" сунул в отдельную функцию и добавил к ней комменты с input & output. Т.ч. читабельность в коде сохраняется.

Были просто опасения, что во флеш есть такая же встроенная функция. А я тут велосипед изобретаю.

Wolsh 18.11.2014 00:10

Флэш дает по возможности универсальные инструменты, которые делают "и это в том числе". Если на каждую конкретную фантазию девелопера пихать встроенные функции, плеер будет весить как винда. Есть универсальный инструмент для анализа текста — регулярные выражения, которые используются почти во всех языках программирования. Где-то они могут оказаться медленнее, чем прямой перебор строки, но чем сложнее задача, тем эффективнее регулярки. Выбирать вам.

nubideus 18.11.2014 00:56

Код AS3:

Где-то они могут оказаться медленнее, чем прямой перебор строки, но чем сложнее задача, тем эффективнее регулярки

во флеше регулярки нативные, а перебор строки медленный. вопрос о скорости становится актуальным, когда для replace нужно вызывать функцию. я не замерял, но имхо так оно.

другое дело найти способ быстро конвертировать String в Vector.<uint> и обратно.
http://help.adobe.com/ru_RU/FlashPla...tml#writeUTF() например

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

Добавлено через 23 часа 1 минуту
Цитата:

например
.. writeUTFBytes выполняется с той же скоростью, с какой и for...charCodeAt


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

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