![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
ПРОБЛЕМА: так как из Delphi переменную можно отправить только как string:
(procedure TShockwaveFlash.SetVariable(const name: WideString; const value: WideString) вид процедуры таков: ShockwaveFlash1.SetVariable(‘myVar’,’1’).Необходимо из Delphi переслать большой массив. При пересылке по указанной выше процедуре (ShockwaveFlash1.SetVariable(‘myVar’,’[‘one’,’two’]’) или даже вот так: ShockwaveFlash1.SetVariable(‘myVar[0]’,’one’)), Flash получает СТРОКОВУЮ переменную вида “[“one”,”two”]” или во втором случае не получает ничего:-). ВОПРОС: я рассмотрел во всех источниках, которые смог обнаружить, все возможные преобразования переменных, НО нигде не нашел преобразования из string в expression. Вполне возможно, что такого явного преобразования просто не существует. Подскажите пожалуйста как решить данную проблему с наименьшими потерями ресурсов. Или даже вот так: как «5+2» привести к виду 5+2. Возможно, что я перегрелся и бажу по страшной силе, забуксовал я конкретно. Заранее благодарю, Ваш Акакий. |
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
ПРОБЛЕМА: так как из Delphi переменную можно отправить только как string:
(procedure TShockwaveFlash.SetVariable(const name: WideString; const value: WideString) вид процедуры таков: ShockwaveFlash1.SetVariable(‘myVar’,’1’).Необходимо из Delphi переслать большой массив. При пересылке по указанной выше процедуре (ShockwaveFlash1.SetVariable(‘myVar’,’[‘one’,’two’]’) или даже вот так: ShockwaveFlash1.SetVariable(‘myVar[0]’,’one’)), Flash получает СТРОКОВУЮ переменную вида “[“one”,”two”]” или во втором случае не получает ничего:-). ВОПРОС: я рассмотрел во всех источниках, которые смог обнаружить, все возможные преобразования переменных, НО нигде не нашел преобразования из string в expression. Вполне возможно, что такого явного преобразования просто не существует. Подскажите пожалуйста как решить данную проблему с наименьшими потерями ресурсов. Или даже вот так: как «5+2» привести к виду 5+2. Возможно, что я перегрелся и бажу по страшной силе, забуксовал я конкретно. Заранее благодарю, Ваш Акакий. |
|
|||||
|
Регистрация: Mar 2002
Сообщений: 204
|
Вычисление переданного в строке выражения - eval()
Иной способ передачи массива - передать его как CSV ('one,two,three'), а в Flash воспользоваться методом split класса String: myArray=myVar.split(","); Удачи. |
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
Вот уже второй раз Вы, Уважаемый DMN, помогаете мне в трудную минуту! Огромное Вам спасибо за альтруизм.
Всегда рад помочь Вам. К сожалению, советами в области программирования пока помогаете только Вы мне, но мало ли областей пересечения интересов людских? С благодарностью, Акакий |
|
|||||
|
Guest
Сообщений: n/a
|
String->expression преобразуют компиляторы или интерпретаторы. В стандарте ECMA-262 для этого предназначена функция eval, но в AS на FLASH эта возможность у eval не реализована.
Как это делается на AS - смотри исходники: "Полярная система координат" автор skaa или "Flash Interpretor v.1.0" автор я. В присоединённом файле - ещё оин исходник "eval". Удач! ![]() |
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
Спасибо Вам, товарисч Сухов! Интерепретатор Ваш я помню, чхотя качал довольно давно, найду сейчас у себя. Помню в то время он меня удивил по хорошему. Удач Вам дальнейших.
|
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
Товарисч Сухов, будьте любезны, расскажите пожалуйста: каким макаром у вас реализована функция, которая в запущенном интерпретаторе делает следующее:
вводим вот такое выражение: z=”(1,”sdf”,true)”; нажимаем «Enter» и получаем: z=(1,”sdf”,true); Это ведь не split()? Я знаю точно, потому что искал это слово в Вашем коде. Согласитесь, что лучше автора, его код никто не знает ![]() Заранее благодарю, Ваш Акакий. |
|
|||||
|
Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
|
Уважаемый DMN, простите за навязчивость, но к сожалению с eval во Flash дела обстоят следующим образом (цитата из help):
«Функция; предоставляет доступ к переменным, свойствам, объектам и мувикам по их имени. Если expression - это переменная или свойство, будет возвращено значение переменной или свойства. Если же expression - объект или мувик, возвращается ссылка на него. Если элемент, имя которого указано в expression не найден, возвращается неопределенное значение (undefined). NOTE: Действие ActionScript eval - не то же самое, что функция eval в JavaScript, и не может быть использована для вычисления выражений.» Разбитие string по признаку “,” тоже не совсем подходит, так как мои элементы сами могут содержать запятую, но не это главное, т.к. можно вместо запятой использовать другой символ, главное то, что string в Delphi позволяет размер 255, а моя строка гораздо больше и самое главное – существенно тратятся ресурсы на split большой строки во Flash. Я очень верю в Ваш интеллект, не покидайте меня на распутье, плиз! DMN и другие флешеры, есть ли варианты ещё? Заранее благодарю, Ваш Акакий. |
|
|||||
|
Guest
Сообщений: n/a
|
2 Акакий Акакиевич.
Цитата:
Программа воспринимает строку ”(1,”sdf”,true)” как два строковых литерала ”(1,” и ”,true)” между которыми находятся символы sdf. А поскольку sdf не является ОПЕРАЦИЕЙ определённой для строковых выражений, то соответственно выдаёт ошибку. Если написать z=”(1,sdf,true)”, тогда ошибки не будет. Переменной z присваивается значение строкового литерала - ”(1,sdf,true)”, те z это фактически СТРОКА -”(1,sdf,true)”. Делается это просто - во входном потоке ЛЮБЫЕ символы, которые находятся между двойными кавычками - "......." считаются символами строки, посимвольно суммируются и присваиваются переменной стоящей в левой части присваивания. Вот собственно и всё. Ежели ещё будут вопросы - милости просим! Спрашивайте. Если смогу - отвечу. ![]() |
|
|||||
|
Guest
Сообщений: n/a
|
2 Акакий Акакиевич.
Цитата:
Программа воспринимает строку ”(1,”sdf”,true)” как два строковых литерала ”(1,” и ”,true)” между которыми находятся символы sdf. А поскольку sdf не является ОПЕРАЦИЕЙ определённой для строковых выражений, то соответственно выдаёт ошибку. Если написать z=”(1,sdf,true)”, тогда ошибки не будет. Переменной z присваивается значение строкового литерала - ”(1,sdf,true)”, те z это фактически СТРОКА -”(1,sdf,true)”. Делается это просто - во входном потоке ЛЮБЫЕ символы, которые находятся между двойными кавычками - "......." считаются символами строки, посимвольно суммируются и присваиваются переменной стоящей в левой части присваивания. Вот собственно и всё. Ежели ещё будут вопросы - милости просим! Спрашивайте. Если смогу - отвечу. ![]() |
![]() |
Часовой пояс GMT +4, время: 17:25. |
|
|
« Предыдущая тема | Следующая тема » |
|
|