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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Advanced

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

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
По умолчанию string ---> exspression!!!

ПРОБЛЕМА: так как из 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. Возможно, что я перегрелся и бажу по страшной силе, забуксовал я конкретно. Заранее благодарю, Ваш Акакий.

Старый 04.06.2002, 00:42
Акакий Акакиевич вне форума Посмотреть профиль Отправить личное сообщение для Акакий Акакиевич Найти все сообщения от Акакий Акакиевич
  № 2  
Акакий Акакиевич
 
Аватар для Акакий Акакиевич

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
По умолчанию string ---> exspression!!!

ПРОБЛЕМА: так как из 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. Возможно, что я перегрелся и бажу по страшной силе, забуксовал я конкретно. Заранее благодарю, Ваш Акакий.

Старый 04.06.2002, 01:05
DMN вне форума Посмотреть профиль Отправить личное сообщение для DMN Посетить домашнюю страницу DMN Найти все сообщения от DMN
  № 3  
DMN
 
Аватар для DMN

Регистрация: Mar 2002
Сообщений: 204
Вычисление переданного в строке выражения - eval()
Иной способ передачи массива - передать его как CSV ('one,two,three'), а в Flash воспользоваться методом split класса String:

myArray=myVar.split(",");

Удачи.

Старый 04.06.2002, 01:43
Акакий Акакиевич вне форума Посмотреть профиль Отправить личное сообщение для Акакий Акакиевич Найти все сообщения от Акакий Акакиевич
  № 4  
Акакий Акакиевич
 
Аватар для Акакий Акакиевич

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
Вот уже второй раз Вы, Уважаемый DMN, помогаете мне в трудную минуту! Огромное Вам спасибо за альтруизм.
Всегда рад помочь Вам. К сожалению, советами в области программирования пока помогаете только Вы мне, но мало ли областей пересечения интересов людских?
С благодарностью, Акакий

Старый 04.06.2002, 03:35
  № 5  
Suhoff
Guest

Сообщений: n/a
String->expression преобразуют компиляторы или интерпретаторы. В стандарте ECMA-262 для этого предназначена функция eval, но в AS на FLASH эта возможность у eval не реализована.
Как это делается на AS - смотри исходники: "Полярная система координат" автор skaa или "Flash Interpretor v.1.0" автор я.

В присоединённом файле - ещё оин исходник "eval".

Удач!
Вложения
Тип файла: txt eval.txt (12.9 Кб, 259 просмотров)

Старый 04.06.2002, 15:51
Акакий Акакиевич вне форума Посмотреть профиль Отправить личное сообщение для Акакий Акакиевич Найти все сообщения от Акакий Акакиевич
  № 6  
Акакий Акакиевич
 
Аватар для Акакий Акакиевич

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
Спасибо Вам, товарисч Сухов! Интерепретатор Ваш я помню, чхотя качал довольно давно, найду сейчас у себя. Помню в то время он меня удивил по хорошему. Удач Вам дальнейших.

Старый 04.06.2002, 21:24
Акакий Акакиевич вне форума Посмотреть профиль Отправить личное сообщение для Акакий Акакиевич Найти все сообщения от Акакий Акакиевич
  № 7  
Акакий Акакиевич
 
Аватар для Акакий Акакиевич

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
Товарисч Сухов, будьте любезны, расскажите пожалуйста: каким макаром у вас реализована функция, которая в запущенном интерпретаторе делает следующее:
вводим вот такое выражение:
z=”(1,”sdf”,true)”;
нажимаем «Enter» и получаем:
z=(1,”sdf”,true);
Это ведь не split()? Я знаю точно, потому что искал это слово в Вашем коде. Согласитесь, что лучше автора, его код никто не знает
Заранее благодарю, Ваш Акакий.

Старый 04.06.2002, 21:29
Акакий Акакиевич вне форума Посмотреть профиль Отправить личное сообщение для Акакий Акакиевич Найти все сообщения от Акакий Акакиевич
  № 8  
Акакий Акакиевич
 
Аватар для Акакий Акакиевич

Регистрация: Nov 2001
Адрес: Шинель
Сообщений: 99
Уважаемый DMN, простите за навязчивость, но к сожалению с eval во Flash дела обстоят следующим образом (цитата из help):
«Функция; предоставляет доступ к переменным, свойствам, объектам и мувикам по их имени. Если expression - это переменная или свойство, будет возвращено значение переменной или свойства. Если же expression - объект или мувик, возвращается ссылка на него. Если элемент, имя которого указано в expression не найден, возвращается неопределенное значение (undefined).
NOTE: Действие ActionScript eval - не то же самое, что функция eval в JavaScript, и не может быть использована для вычисления выражений.»
Разбитие string по признаку “,” тоже не совсем подходит, так как мои элементы сами могут содержать запятую, но не это главное, т.к. можно вместо запятой использовать другой символ, главное то, что string в Delphi позволяет размер 255, а моя строка гораздо больше и самое главное – существенно тратятся ресурсы на split большой строки во Flash.
Я очень верю в Ваш интеллект, не покидайте меня на распутье, плиз! DMN и другие флешеры, есть ли варианты ещё?
Заранее благодарю, Ваш Акакий.

Старый 05.06.2002, 02:33
  № 9  
Suhoff
Guest

Сообщений: n/a
2 Акакий Акакиевич.
Цитата:
вводим вот такое выражение:
z=”(1,”sdf”,true)”;
нажимаем «Enter» и получаем:
z=(1,”sdf”,true);
Если ввести такое выражение - z=”(1,”sdf”,true)”; , то получим ОШИБКУ!! - "ERROR!!-> Not valid position of s."
Программа воспринимает строку ”(1,”sdf”,true)” как два строковых литерала ”(1,” и ”,true)” между которыми находятся символы sdf. А поскольку sdf не является ОПЕРАЦИЕЙ определённой для строковых выражений, то соответственно выдаёт ошибку.
Если написать z=”(1,sdf,true)”, тогда ошибки не будет. Переменной z присваивается значение строкового литерала - ”(1,sdf,true)”, те z это фактически СТРОКА -”(1,sdf,true)”.
Делается это просто - во входном потоке ЛЮБЫЕ символы, которые находятся между двойными кавычками - "......." считаются символами строки, посимвольно суммируются и присваиваются переменной стоящей в левой части присваивания.
Вот собственно и всё.
Ежели ещё будут вопросы - милости просим! Спрашивайте. Если смогу - отвечу.

Старый 05.06.2002, 02:41
  № 10  
Suhoff
Guest

Сообщений: n/a
2 Акакий Акакиевич.
Цитата:
вводим вот такое выражение:
z=”(1,”sdf”,true)”;
нажимаем «Enter» и получаем:
z=(1,”sdf”,true);
Если ввести такое выражение - z=”(1,”sdf”,true)”; , то получим ОШИБКУ!! - "ERROR!!-> Not valid position of s."
Программа воспринимает строку ”(1,”sdf”,true)” как два строковых литерала ”(1,” и ”,true)” между которыми находятся символы sdf. А поскольку sdf не является ОПЕРАЦИЕЙ определённой для строковых выражений, то соответственно выдаёт ошибку.
Если написать z=”(1,sdf,true)”, тогда ошибки не будет. Переменной z присваивается значение строкового литерала - ”(1,sdf,true)”, те z это фактически СТРОКА -”(1,sdf,true)”.
Делается это просто - во входном потоке ЛЮБЫЕ символы, которые находятся между двойными кавычками - "......." считаются символами строки, посимвольно суммируются и присваиваются переменной стоящей в левой части присваивания.
Вот собственно и всё.
Ежели ещё будут вопросы - милости просим! Спрашивайте. Если смогу - отвечу.

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

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

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


 


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


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