![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
package { import flash.display.Sprite; import flash.events.Event; /** * @author KorDum */ public class Main extends Sprite { private var _charHash:Object = { "001" : "A", "002" : "B", "003" : "C" } //--------------------------------------------------------------------------- // // CONSTRUCTOR // //--------------------------------------------------------------------------- public function Main():void { trace(parse("001\\003\\002\\\\002\\001")); } //--------------------------------------------------------------------------- // // PRIVATE METHODS // //--------------------------------------------------------------------------- private function parse(str:String):String { var wordList:Array = str.split(/\\\\/); var result:String = ""; for (var i:uint = 0; i < wordList.length; i++) { var charList:Array = (wordList[i] as String).split(/\\/); for (var j:uint = 0; j < charList.length; j++) { result += _charHash[ charList[j] ]; } result += " "; } return result; } } } Добавлено через 37 секунд ЗЫ. пардон, я слеши перепутал. Соответственно и экранировка не нужна. Но смысл должен быть понятен.
__________________
тут я |
|
|||||
|
Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
|
Угу. спс. Сейчас буду пробовать. Ночь длиииная! ))
|
|
|||||
|
На самом деле надо просто пройтись по строке поиском по "/" и сравнивать индекс с предыдущим значением, если разница на 1, то значит пробел, если больше — значит берем substring и получаем код символа.
да и вообще, прямой слеш не спецсимвол же, обратный — спецсимвол, так ведь?
__________________
cats are supreme beings |
|
|||||
|
Вот моя версия:
package { import flash.display.Sprite; public class Main extends Sprite { private var codepage:Object = { "001" : "H", "002" : "E", "003" : "L", "004" : "O", "005" : "W", "006" : "R", "007" : "D" } public function Main() { trace(decode("/001/002/003/003/004//005/004/006/003/007/")) } public function decode(str:String):String{ var prevIndex:int = 1 var newIndex:int = str.indexOf("/", prevIndex) var result:String = "" while (newIndex!=-1) { if (newIndex-prevIndex == 0) { result+=" " } else { result += codepage[str.substring(prevIndex, newIndex)] } prevIndex = newIndex+1 newIndex = str.indexOf("/", prevIndex) } return result } } }
__________________
cats are supreme beings |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
Либо можно бить строку на набор массивов и работать с ними
package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author xo11 */ public class Main extends Sprite { private var inputString:String = "001/003/005//012/032//852//012/564/"; private var wordsArray:Array; private var outputString:String=""; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point wordsArray = split_words(inputString); for (var i:int = 0; i < wordsArray.length; i++) { wordsArray[i] = split_symbols(wordsArray[i]) for (var j:int = 0; j < wordsArray[i].length; j++) { wordsArray[i][j] = replace_code(wordsArray[i][j]); outputString += wordsArray[i][j]; } outputString+=" " } trace (outputString) } private function replace_code($str:String):String { switch ($str) { case "001": $str = "a" break; case "003": $str = "b" break; case "005": $str = "c" break; case "012": $str = "d" break; case "032": $str = "e" break; case "852": $str = "f" break; case "564": $str = "g" break; default: } return $str; } private function split_words($str:String):Array { return $str.split("//") } private function split_symbols($str:String):Array { return $str.split("/") } } } |
|
|||||
|
Чо-то не пойму где проблема. Регуляркой выцепляем то, что является пробелом, потом по всему объекту соответствия регуляркой запиливаем цифры на буквы, потом убираем оставшиеся одиночные слеши.
private var codepage:Object = { "001" : "H", "002" : "E", "003" : "L", "004" : "O", "005" : "W", "006" : "R", "007" : "D" } private function init():void { var source:String = '001/002/003/003/004//005/004/006/003/007'; source = source.replace(/(\/{2,})/g, " "); trace(source); // 001/002/003/003/004 005/004/006/003/007 for (var prop:String in codepage) { source = source.replace(new RegExp(prop, 'g'), codepage[prop]); } trace(source.replace(new RegExp("/","g"), "")); //HELLO WORLD }
__________________
Кодинг, багинг, алгоритминг. me @ Последний раз редактировалось DaFive; 06.12.2012 в 17:26. |
|
|||||
|
Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
|
Блин! Три ночи в тихой истерике! 20 литров кофе и результат = 0!!!
Толи руки не так заточены, толи я чего не понимаю... Из ситуации с пробелом вышел банально: А вот заставить буквы не заменяться, складываться в слова не получается! Опять же слеш который закрывает кодировку буквы (001/) как заставить читать далее??? я пишу так: public function WCode() { object = new Object(); object["001"] = "а"; object["002"] = "б"; object["003"] = "в"; object["004"] = "г"; object["//"] = " "; object["/"] = KonecKoda; //ссылаюсь на функцию input = okno1.input_txt; output = okno2.input_txt; input.text = ""; output.text = ""; *************************************************** public function KonecKoda() // собственно тут должна быть и сама функция. но совершенно непонятно как ее описать. увидел слеш(/), давай читай все что дальше до следующего слеша в вводимом поле input и ставь полученное, добавляя, а не заменяя в поле output! Код вернул прежний. вот: package { import flash.display.MovieClip; import flash.events.Event; import flash.text.TextField; public class WCode extends MovieClip { private var input:TextField; private var output:TextField; private var object:Object; public function WCode() { object = new Object(); object["001"] = "а"; object["002"] = "б"; object["003"] = "в"; object["004"] = "г"; object["//"] = " "; object["/"] = KonecKoda; //ссылаюсь на функцию input = okno1.input_txt; output = okno2.input_txt; input.text = ""; output.text = ""; input.addEventListener(Event.CHANGE, onTextChange); } private function onTextChange(e:Event):void { var text:String = object[input.text]; if (text) { output.text = text; } } { public function KonecKoda() //проблема тут!!! } } } |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
эээ а почитать ответы выше, не? там штук 5 различных вариантов
|
|
|||||
|
Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
|
дык не выходит нифига! Я понимаю что там где-то все есть. Но никак! Совсем не получается!!!
Добавлено через 5 минут я практически даже уверен что решение вот-вот рядом и банально простое, но я что-то его не вижу. совсем! ((( |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|