Макроподстановки в CASE | |
---|---|
Forward Автор |
Возникла проблема макроподстановок, т.е.
Задаю переменные usl1='Case Условие1' usl2='Case Условие2' usl3='Case Условие3' Do Case &usl1 ..... &usl2 ..... &usl3 ..... EndCase А оно почему-то не хочет работать?Или я что не так делаю. |
Re: Макроподстановки в CASE | |
---|---|
Alex Roublev Сообщений: 3695 Откуда: Ярославль Дата регистрации: 28.09.2002 |
Цитата: Все дело в том, что существует прекомпиляция исходника в PE-код, из которого потом уже "куется" машинный код при запуске exe-модуля. Так вот здесь явное нарушение синтаксической конструкции. В данной ситуации программа просто не компилируется и run-time библиотека фокса выдает ошибку. Данная тобой конструкция - полный нонсенс. Это все равно как:
Правильно так, если уж на то пошло:
|
Re: Макроподстановки в CASE | |
---|---|
Forward Автор |
Пробовал и таким образом все-равно почему-то не работает...
|
Re: Макроподстановки в CASE | |
---|---|
Vladimir_Knyr Сообщений: 1711 Откуда: г. Енисейск Дата регистрации: 15.12.2003 |
Hi Forward
вриведи код самих условий, как они у тебя записаны ------------------ хороший код работать будет и обязан, а плохой не жалко. |
Re: Макроподстановки в CASE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Alex!
Цитата:Эт точно - условные конструкции типа IF, CASE и конструкции циклов (DO WHILE, FOR) в принципе не могут быть использованы в макро. Цитата:Да нет, она может быть откомпилирована, но на этапе исполнения получается "одиночный CASE" - т.е. он НЕ может быть привязан к статически откомпилированному заголовку и "хвосту" DO CASE/ENDCASE. Цитата:Вовсе нет - ЭТО то как раз синтаксически корректная и вполне допустимая конструкция - т.к. это "однострочная" команда (не в плане того что её исходник одну строку занимает, а в плане того что она ЛОГИЧЕСКИ из одной строки состоит - команды ветвления/цикла уже ЛОГИЧЕСКИ являются "многострочными"). А как оно "правильно" - то совсем другой вопрос Я бы сделал через EVALUATE() если уж собственно тела условий формируются как строки динамически.... Другой способ - EXECSCRIPT() или COMPILE - т.е. целиком исходный код "собрать", и потом уж единым блоком и выполнять. P.S. Кстати можно посмотреть как решает проблему невозможности макро-исполнения таких конструкций сама MS - в коде процедуры FFC\Runcode.prg ;) ------------------ WBR, Igor |
Re: Макроподстановки в CASE | |
---|---|
Alex Roublev Сообщений: 3695 Откуда: Ярославль Дата регистрации: 28.09.2002 |
Привет, Igor
Цитата: Проверил. Действительно работает. Что-то я увлекся... От RETURN ничего не зависит, а от CASE зависит и DO CASE и ENDCASE Но в отношении циклов макроподстановки, которые привел Forward, точно не заработали бы. Сразу было видно, что между DO CASE и ENDCASE возникает "черная дыра" ;) Цитата: Да уж. Проверка синтаксиса при компиляции. Жаль, что логические ошибки с той же легкостью отлавливаться не могут. Тут утром как-то, перед работой, включил EuroNews и, значит, говорят, мол, изобрели debuger некие программисты (немцы, кажется), которому достаточно указать начальную инструкцию и дальше вызывается некая цепочка (графически выглядело как древесная ветвь с узлами), которая, якобы, мысленно управляема. Эта отладка предполагает некий автоматизированный способ логического анализа алгоритма. Или я спросонья что-то не так понял , или где-то ТАМ до такой крути кто-то дожил. О, как! Цитата: Н-да. EXECSCRIPT() как-то пользовался. Ценная штучка. Так был реализован алгоритм импорта-экспорта для одной из программ. Программа была уже установлена, база наполнялась, а вот алгоритм этого импорта-экспорта претерпевал некоторое время изменения. Поэтому что-то менять и отлаживать было очень удобно прямо на компе с той установленной программой. |
© 2000-2024 Fox Club  |