Re: Как получить имя переменной из строки?
Неа, ни фига не работает :) В сообщении выводится "temp2=temp1".
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Как получить имя переменной из строки?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Неа, ни фига не работает :) В сообщении выводится "temp2=temp1".
Я тоже как раз ищу способ читать из файла имена переменных и присваивать им значения из соседней колонки в процессе выполнения программы. Но - пока увы, способа не нашел.
Зато прочитал всю вашу дискуссию тут! Очень занимательно для меня, как бывшего программера :) Лисп вспомнил... Щас манагерю. А VBA пришлось вспомнить, потому как в моем отделе нужно кучу прайсов разных поставщиков сливать в один свой... Вот и сижу, типа, программлю малость :) Всем спасибо!
Не совсем понял утверждение про уникальность LISP и невозможность выполнения произвольного выражения в других языках. Это называется evaluate an expression, в C/C++ есть функция eval(), точно так же как в Perl, PHP и, как я склонен предположить, в любом современном языке.
> Ctrl E
Многие языки (а скорее системы программирования) имеют билиотеки, позволяющие "выполнять" выражения. В некоторых языках эти средства очень развиты (Perl и т.п.). Но это не "унутренняя способность" языка.
Например, у меня есть библиотеки разбора выражений в Delphi. В том числе, позволяющая "выполнять" LISP. Но это только имитация, так как все сводится к применению "зашитых" в библиотеку конструкций моделируемого языка.
Это же относится к методу Eval, "открытому" в этой ветке и давно вставленному в AutoCAD. Из программы на Delphi я могу вызвать его и передать выражение VBA. Но только в пределах того, что "зашито". Думаю, что набор ограничен.
В LISP же все иначе. Это функциональный язык, который выполняет не только стандартный набор функций, а позволяет создавать свои. Да еще и позволяет передавать результаты без использования переменных.
Кстати, в AutoCAD очень не хватает и метода EvalLisp - выполнить выражение без передачи через SendCommand в командную строку, где его нельзя скрыть.
выполнить выражение без передачи через SendCommand в командную строку, где его нельзя скрыть
а если воспользоваться сист. переменной NOMUTT ?
> ShaggyDoc
Спасибо, но тем не менее:
Мне кажется, что это верно для компилируемых языков, но не для интерпретируемых.
Скомпилированной программе "нечем" выполнить код, подставляемый в строке.
В случае со скриптами (что знаю -- Perl, JavaScript, PHP, по идее, тот же Basic) интерпретатор всегда на месте, и реализация eval на уровне собственно языка, а не подключаемых функций становится тривиальной задачей.
В подтверждение :) имею шутку создателя Perl :
Only perl can parse Perl
(в смысле: только программа perl может разобрать синтаксис языка Perl).
Автору темы: Кстати, сейчас прочитал весьма здравую мысль, вернее указание: "eval() следует использовать для блокирования исключений времени компиляции." Когда-то мне тоже понадобилось использовать заранее наизвестное имя переменной, после чего я пришел к выводу о неправильной (в корне неправильной) логике программы.
> Ctrl E
Язык есть язык. В какой-то среде выражения могут выполняться в режиме интерпретатора. Например, была машина Искра-226, в которой все, включая оболочку ОС использовало Basic. В Mapinfo имеется встроенный MapBasic, предназначенный для того же, что и AutoLISP в AutoCAD. Тот же LISP может выполняться из командной строки в режиме интерпретатора и из компилированных файлов.
"Скриптовость" и "интерпретируемость" - не признак языка, а возможности среды и ее транслятора. Выражения JavaScript в одном браузере не могут быть исполнены в другом. Даже такой простой код, как счетчик на WEB-странице. В конце концов все всегда превращается в инструкции процессора, а они одинаковые, независимо от языка высокого уровня.
>реализация eval на уровне собственно языка, а не подключаемых функций становится тривиальной задачей
Языков существует более тысячи. Большинство мертвых. В LISP сразу ввели eval - на этом он и построен. В другие - не посчитали нужным. Где-то есть аналоги. Переписывать базовые основы никто не будет. Предусмотреть на уровне синтаксиса можно многое, но нужна поддержка в виде транслятора (компилятора или интерпретатора).
Расширение возможностей подключением библиотек - нормальный процесс. На этом сейчас все и построено. Но одни языки легко расширяются, другие тяжело. Попробуйте "расширить" VBA "на VBA", не прикомпоновывая в каждый проект собственные библиотеки. Не утверждаю, что этого сделать нельзя.
> ShaggyDoc
Я своим постом просто сказать, что во многих языках eval не ограничен некоторым подмножеством синтаксиса, который в него посчитали нужным включить, но может выполнить любое выражение, имеющее смысл в рамках всего языка.
Попробуйте "расширить" VBA "на VBA"
Да. Ня абсимока, как говорят в Литве, -- не окупается.
p.s. Извините за некорректную терминологию.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Как получить имя переменной из строки?
Форум работает на PunBB, при поддержке Informer Technologies, Inc