|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
Есть вопрос, ответ на который я не нашел за 2 часа и решил спросить на форуме. Для наших задач захотелось попробовать вызов команты XECUTE для выполнения кода бизнес-логики... Функцияxecuteval(code,result,error) set idx=$increment(^wx) ; сперва формируем индекс idx для возвращение результата выполнения кода ^wx(idx) xecute "set idx="_idx_" "_code ; перед кодом инициализируем индекс xecute "set result="_$get(^wx(idx)) ; после выполнения устанавливаем результат равным ^wx(idx) quit:$quit 0 quitПример выполнения: set result=1 set error=1 do xecuteval("set a=7 set a=a*5 set ^wx(idx)=a",.result,.error)После выполнения в result будет 35. Зачем это мне - отдельный разговор. Просто захотелось... А вопрос, на который я не нашел ответ - Как сделать вот так? Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Уж не говоря об использовании в коде циклов и уровней выполнения... Или спросите таки, зачем оно? Я буду использовать функцию xecuteval в вызовах GT.M Call-In, для выполнения ее в C++ коде. И хочется, чтобы код на MUMPS был написан так как я пишу в файле - с переносами строк и уровнями " . ". Код: plaintext 1. 2. 3. 4. 5.
а не одной строкой... У меня есть только одна мысль - реализовать на C++ "чистку" строки с кодом - отбрасывать переносы строк, например. Не знаю как получится с уровнями выполнения. Может кто то делал подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2014, 18:49 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
SergeyLee, как вариант, можно использовать оператор конкатенации строк: Код: plaintext 1. 2. 3. 4. 5.
Выглядит, правда, не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2014, 23:48 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
а почему бы просто не создавать временные программы и их исполнять. Думаю это будет сделать несложно и для gt.m ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 00:06 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
SergeyLeeКак сделать вот так?Никак: Syntax Rules (White Space) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 10:55 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
DAiMor, Собственно эта функция задумывается для "быстрой разработки кода на М, чтобы затем этот код оформить в функции"... Правда начинаю уже думать, что лучше сразу писать функции, компилировать код и выполнять. Общая схема такая примерно... 1. На фронтенде (PHP) используются функции разработанного нами расширения 2. Расширение собственно формирует запрос и передает его на бекенд (другой хост) 3. Бекенд получает запрос, обрабатывает его и передает на исполнение GT.M (посредством одной из 8-16 процессов, которые работают по Call-In фреймоворку от GT.M, тоесть выполняют код М в C++ коде) И вот захотелось разработчику фронтенда перенести бизнес-логику на М. Я не могу разобраться в его PHP коде (точнее это страшно и у меня есть свои задачи), а он пока что не знает М. Вот и подумалось - сперва переписывать логику прямо в PHP функциях, вызывая код на М, проработать его и создать функцию на его основе, затем вызывать только функцию... Как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 11:24 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
eduard93, спасибо! и не подумалось о простой конкатенации вчера) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 11:28 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
DAiMorа почему бы просто не создавать временные программы и их исполнять. Думаю это будет сделать несложно и для gt.m Хотя возможно Вы имели в виду такой алгоритм: - строка кода передается (в виде строки или глобала) на бекенд - и здесь нет ограничения в 8192 байта для XECUTE в GT.M - бекенд создает временный файл, скажем, _exec_000123.m и сохраняет код с форматированием как есть - бекенд линкует этот файл и выполняет - здесь много проблем с ошибками как линкови, так и выполнения ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 12:33 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
SergeyLee, Да возможно будут ошибки, но все эти ошибки будут связаны только с самим выполняемым кодом, и значит в нем есть ошибки, разве не так ? и все их сможет отловить бекенд и отправить фронтенду ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 12:43 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
DAiMorSergeyLee, Да возможно будут ошибки, но все эти ошибки будут связаны только с самим выполняемым кодом, и значит в нем есть ошибки, разве не так ? и все их сможет отловить бекенд и отправить фронтенду Все так, буду реализовывать сегодня-завтра. Спасибо за идею! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 12:47 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2014, 14:25 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
Лучше бизнес логику создавать на сервере, а клиенту отправить строки(массивы) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2014, 20:15 |
|
Команда XECUTE и форматированный код на выполнение
|
|||
---|---|---|---|
#18+
Valeriu, Ага, знакомое, mwire.m измененный Вами... :) Я сделал попроще, но такой подход учту. Только не совсем понятно в каком формате можно передавать строки, массивы? Как я понял Вы парсите их по $char(0), тоесть по концу строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 19:36 |
|
|
start [/forum/topic.php?fid=39&msg=38667259&tid=1556863]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 161ms |
0 / 0 |