powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузить текст рутины в переменную
33 сообщений из 33, показаны все 2 страниц
Загрузить текст рутины в переменную
    #39935070
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня .

Каким образом в Каше можно загрузить текст программы в переменную ?
И какой команды ее сохранить и компилировать - например в формате .int ?

Спасибо.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935134
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понятно, что хочется сделать

С программами mac, int, inc можно оперировать через класс %Library.RoutineMgr
открыть, читать как стрим, писать как в стрим
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935147
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Забыл сказать, что классами я не пользуюсь - чистый М
Вроде что-то нашел

ZLOAD myroutine
ZSAVE myroutine

Не знаю как загрузит строки в переменную и отослать клиенту .. (ВЕБ)
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935154
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,
^%R - набор вызовов для работы с рутинами, была и хорошая дока на эту утилиту.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935157
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,
нашел фирменную доку от ИС - куда отправить, если нужно?
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935165
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935166
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Забыл сказать, что классами я не пользуюсь - чистый М

Есть функция $text()...
С ее помощью можно читать строки программы. ;)
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935168
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,
Отправил.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935172
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,

Спасибо, хорошая штука.
Не знал про такой.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935175
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, прям машина времени ;)
Капсулу с заветами будущим м-мистам откопали?
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935182
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,
Лучшее - враг хорошего!
Если бы ИС так все документировали...
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935264
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,
Alex, спасибо.
Вроде то что нужно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
rtnCODE(name)
 s $ztrap="error"
 s node="" 
 s ext="INT"
 s routine=name_"."_ext
 s options="L" ; load the previously saved routine into the code parameter. 
 s errors=""   ; empty list
 s return=$$ROUTINE^%R(routine, .code, .errors, options)
 f i=0:1 s node=$o(code(node)) q:node=""  d
 . s cont=code(node)
 . s node(i)=cont
 . s %fcgi("o","stdout",i)=node(i)_$c(13,10)
 s %fcgi("o","header","Content-Type")="text/plain" 
 q
 ;;

...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935274
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovНу, прям машина времени ;)
Капсулу с заветами будущим м-мистам откопали?

Вы правы.
Нужно это было для старой версии Каше 5.0...
На новых систем Била, никакой удачи не видать .
клиентское "Студио" не пашет кроме как XP.
Хотел посмотреть как моя задумка для GT.M будет работать
в браузере Мозила, но уже для Каше.
Вроде пашет. Немного поправлять приходится код.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935356
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,
А случайно для ГЛОБАЛОВ на подобие ничего нету ?
Было бы здорово ...
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39935681
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто может сказать в версии 5,0 вот этот класс

##class(%ResultSet).%New("%Global:Get")

есть аналог ???
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936037
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
А случайно для ГЛОБАЛОВ на подобие ничего нету ?
Было бы здорово ...
Когда-то тема здесь обсуждалась, и не раз. Можно найти поиском "GOF". Вот самое ранее позитивное сообщение .
Не проверял, но вполне возможно, что в вашей версии это работает.

Обратите внимание, что это так называемый блочный, а на самом деле, двоичный формат сохранения глобалов, самый быстрый и компактный, но... двоичный. Если нужен текстовый, то в старых версиях можно попробовать копать в сторону %GO/%GI.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936315
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

Спасибо, понятно.
Мне больше интересовало как в Каше вызывают
глобалы по маске. Я раньше поднял эту тему.
Пользуюсь посторонним кодом, работает,
но немножко тормозит если глобал большой.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936513
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть один нюанс.
При переходе в системную область (%SYS )
очень много в списке лишних рутин ... Наверное все что там есть.
Так же и в обычных областях много лишнего.
Это не наблюдается при вызове обычной утилиты %RD...
Как это можно обойти ?
Вот мой код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
rlist(mask,zn)
 s $ztrap="error"
 ZNSPACE zn 
 s rtname=""
 i mask="*" d
 . k rtnarr f i=0:1 s rtname=$o(^$ROUTINE(rtname)) q:rtname=""  d
 . . s rtnarr(i)=rtname
 s %fcgi("o","stdout",n)=$$ENCODE^%FCGIJSON("rtnarr")
 s %fcgi("o","header","Content-Type")="application/json"
 q
 ;;


Спасибо.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936618
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Это не наблюдается при вызове обычной утилиты %RD...
Потому что для получения имени следующей программы %RD не идёт по $o(^$ROUTINE(rtname)), а вызывает недокументированную функцию $$NEXT^%R(ROU,env,$g(match),EXT). Посмотрите по коду, как они это делают; в моей версии вызов делается изнутри $$NXTROU^%URSETB.

Возможно, вам будет проще сделать флажок ~ "Показывать системные программы", и если он = 0, отбрасывать программы с именами, начинающимися с "%".
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936630
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Примерно я так и делаю.
Можно ограничиваться маской,
и для системных(по пальцам которых я использую)
примерно также .
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
rlist(mask,zn)
 s $ztrap="error"
 ZNSPACE zn 
 s rtname="",n=-1
 s msk=$p(mask,"*",1)
 i (msk="")&(zn'="%SYS") d
 . k rtnarr f i=0:1 s rtname=$o(^$ROUTINE(rtname)) q:rtname=""  d
 . . i rtname'["%" d
 . . . s n=n+1,rtnarr(n)=rtname
 i (msk'="") s lng=$l(msk) d
 . k rtnarr f i=0:1 s rtname=$o(^$ROUTINE(rtname)) q:rtname=""  d
 . . s codextract=$e(rtname,1,lng)
 . . i $e(rtname,1,lng)=msk d
 . . . s n=n+1,rtnarr(n)=rtname
 s %fcgi("o","stdout",n)=$$ENCODE^%FCGIJSON("rtnarr")
 s %fcgi("o","header","Content-Type")="application/json"
 q
 ;;

...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936660
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

Вроде как ZNSPACE zn в область %CACHELIB не переключал, помнится...
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936682
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,
В %SYS переключается, в %CACHELIB пока нету надобности.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936754
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
DAiMorС программами mac, int, inc можно оперировать через класс %Library.RoutineMgr
А можно где-то посмотреть примеры для работы с классами для 5.0 ?
Вроде смотрю они есть для этой версии ...
%Library.RoutineMgr
%Library.ResultSet
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936840
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

А какие примеры по работе с классами нужны?
Получить текст класса как в студии?
Не было такого способа, вплоть до того как появился Atelier в 2016.2
Может и было что-то но уж точно не в 5.0

Текст класса, генерируется на основе объектов описанных в классах пакета %Dictionary
Был ли такой пакет в 5.0 я уже не скажу, я ее уже много лет не видел. А в документации не смог найти
Но думаю точно был класс %Library.ClassDefinition, который тоже можно было использовать для этого.
Для того чтобы изменить код класса, нужно будет в обратную сторону распарсивать код класса и сохранять по нужным местам.

Можно посмотреть у меня в исходниках на Java как я собирал текст класса. И код для сохранения класса.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39936910
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Я бы с удовольствием попробовать пока это:
(Смотрю в %CACHELIB %Library.ResultSet есть)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Set Namespace = "USER"
Set mask = "^BACKTR(""DATA"",,)"
Set tRS = ##class(%ResultSet).%New("%Global:Get")
Set tSC = tRS.Execute(Namespace,Mask,"")
While tRS.Next() {
    Set gn = tRS.GetData(1)
    Set data = tRS.GetData(2)
}
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39939384
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не подскажите как увеличивать буфер сохраняемой программы ?
Такое впечатление, что оно меньше 32 кб.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
rtnSAVE(head,code)
 s rtname=$p(head,"~",1),namespace=$p(head,"~",2)
 Znspace namespace
 s code(0)=0
 f j=1:1 s string=$p(code,$c(10),j) q:string=""  d
 . s code(j)=string
 s code(0)=j-1
 s name=rtname
 s ext="INT"
 s routine=name_"."_ext
 s options="CS" ; Compile and Save
 s errors="" ; empty list
 s return = $$ROUTINE^%R(routine,.code,.errors,options)
 s errcode=$$FMTERR^%R(.errors, .code)
 i errcode'="" d
 . s %fcgi("o","stdout",i)=errcode_$c(13,10)
 e  s %fcgi("o","stdout",i)="Compilation result: "_return_$c(13,10)
 s %fcgi("o","header","Content-Type")="text/plain" 
 q
 ;;


В самом Каше, (студио) сохраняет без проблем
При помощи в кодом описанном выше не хочет. создается впечатление
что по дефолту гдето 8-16 кб
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980230
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращаюсь к этой теме.
Я использую для передачи серверу текст рутины методом PUT (Ajax)
Может быть у Ajax для передачи ограничение на длину строки ?
Как это преодолеть ?

Спасибо.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980247
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Возвращаюсь к этой теме.
Я использую для передачи серверу текст рутины методом PUT (Ajax)
Может быть у Ajax для передачи ограничение на длину строки ?
Как это преодолеть ?

Спасибо.


у AJAX нет ограничения, но оно может быть на стороне сервера, или просто из-за таймаутов, но тогда оно должно быть сильно большим.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980250
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

Вообще я думаю, если бы вы реализовали Atelier API который мог бы повторить хотя бы основной функционал, то получилось бы гораздо больше пользы от этого, вместо изобретения велосипеда.

Тогда вы бы смогли подключиться из VSCode к вашему серверу будь это GT.M, Yotta или IRIS
Есть и аналоги VSCode которые могут работать в браузере и сам VSCode в браузере, но при этом уже сейчас в VSCode уже есть гораздо больше возможностей чем вы сможете добавить, и так как сейчас InterSystems способствует его развитию и продолжит развиваться.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980258
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Есть одна задумка попробовать использовать вот это, но только для Каше:
https://github.com/jewuma/mumps-debug
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980539
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorу AJAX нет ограничения
Да. Это связано с Каше 5.
Я пробовал на Каше2015 это не происходит.
Я косил почему то больше на ^%R - работы с рутинами
Видимо где-то какие-то настройки ...
Потому что со своей родной студии 5.0 этого нет - сохраняет 32кб
Конечно старая версия это тоже факт.
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980935
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Может быть у Ajax для передачи ограничение на длину строки ?

Ограничения есть только на запросы типа GET... На POST ограничений нет
Valeriu
Как это преодолеть ?

Залезать в настройки ИИСа и увеличивать цифру...
...
Рейтинг: 0 / 0
Загрузить текст рутины в переменную
    #39980993
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗалезать в настройки ИИСа и увеличивать цифру... krvsa,
Знал бы где ...
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузить текст рутины в переменную
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]