Гость
Map
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузить текст рутины в переменную / 25 сообщений из 33, страница 1 из 2
06.03.2020, 10:57
    #39935070
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
Доброго дня .

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

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

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

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

ZLOAD myroutine
ZSAVE myroutine

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

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

Спасибо, хорошая штука.
Не знал про такой.
...
Рейтинг: 0 / 0
06.03.2020, 13:37
    #39935175
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
Ну, прям машина времени ;)
Капсулу с заветами будущим м-мистам откопали?
...
Рейтинг: 0 / 0
06.03.2020, 13:46
    #39935182
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
kolesov,
Лучшее - враг хорошего!
Если бы ИС так все документировали...
...
Рейтинг: 0 / 0
06.03.2020, 16:16
    #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
06.03.2020, 17:29
    #39935274
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
kolesovНу, прям машина времени ;)
Капсулу с заветами будущим м-мистам откопали?

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

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

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

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

Спасибо, понятно.
Мне больше интересовало как в Каше вызывают
глобалы по маске. Я раньше поднял эту тему.
Пользуюсь посторонним кодом, работает,
но немножко тормозит если глобал большой.
...
Рейтинг: 0 / 0
12.03.2020, 08:46
    #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
12.03.2020, 12:29
    #39936618
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
Valeriu
Это не наблюдается при вызове обычной утилиты %RD...
Потому что для получения имени следующей программы %RD не идёт по $o(^$ROUTINE(rtname)), а вызывает недокументированную функцию $$NEXT^%R(ROU,env,$g(match),EXT). Посмотрите по коду, как они это делают; в моей версии вызов делается изнутри $$NXTROU^%URSETB.

Возможно, вам будет проще сделать флажок ~ "Показывать системные программы", и если он = 0, отбрасывать программы с именами, начинающимися с "%".
...
Рейтинг: 0 / 0
12.03.2020, 12:53
    #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
12.03.2020, 13:54
    #39936660
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить текст рутины в переменную
Valeriu,

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

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

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

Можно посмотреть у меня в исходниках на Java как я собирал текст класса. И код для сохранения класса.
...
Рейтинг: 0 / 0
13.03.2020, 08:48
    #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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузить текст рутины в переменную / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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