powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Parsing Global в Cache
8 сообщений из 8, страница 1 из 1
Parsing Global в Cache
    #35961518
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здравствуйте !!!

Какая рутина в Cache' (Windows) "Explorer"-е отвечает за поиск Глобала по маске ?
Не в терминале !!!

Спасибо.
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35961547
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$QUERY
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35961705
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, просто интересует прием типа ^Glob(,,"что-то" как в Сасне'
А вот код из mumps-1.47 подправить бы ...

Код: plaintext
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.
QueryGlb(Mask,Ret,SW,CNT,Er)
	 Set GL=Mask If Mask["/" Set Q= 0  Do
 	. For %= 1 : 1 :$L(Mask) Set:$E(Mask,%)="""" Q='Q If 'Q,$E(Mask,%)="/" Set SW=$G(SW)_$E(Mask,%, 999 ),GL=$E(Mask, 1 ,%- 1 )
 	If $E(GL)'="^" Set GL="^"_GL
 	Set STOP=$E(GL,$L(GL))=")" S:STOP GL=$E(GL,1,$L(GL)-1)
 	Set F=$P(GL,"(",2,999),GL=$P(GL,"(")_$S(GL["(":"(",1:""),Q=0 G Na:F=""
 	If $E(F)'="""" S GL=GL_""""
 	For %= 1 : 1 :$L(F) D
 	. If $E(F,%)="""" S Q='Q,GL=GL_"""" Q
 	. If $E(F,%)'=","!Q S GL=GL_$E(F,%) Q
 	. Set GL=GL_$S($E(F,%- 1 )="""":"", 1 :"""")_","_$S($E(F,%+ 1 )="""":"", 1 :"""")
 	Set:$E(GL,$L(GL))'="""" GL=GL_"""" S GL=GL_")"
Na  Set GL=$NA(@GL,999)
 	Set NS=$QL(GL),LS=$QS(GL,NS),L1="" S:NS L1=$NA(@GL,NS-1)
 	Set MAX=500,LEV=999,DO=0,NC=0
 	If SW["/D" Set DO=1
 	If SW["/L" Set LEV=+$E($P(SW,"/L",2),2,99)
 	If SW["/N" Set NC=1
 	If SW["/M" Set MAX=+$E($P(SW,"/M",2),2,99)
 	Set CNT=0 If $D(@GL)#10 Set Ret=GL_"="_@GL S CNT=1
 	For i=1:1 Set GL=$Q(@GL) Q:GL=""  Do  Q:STOP>1
 	. If STOP,$NA(@GL,NS-1)'=L1!($QS(GL,NS)]]LS) Set STOP= 2  Q
 	. Q:$QL(GL)>LEV
 	. Set F=@GL Set:'DO Ret(i)=GL_"="_F_"|" 
 	. Set CNT=CNT+ 1  I CNT=MAX S STOP= 2 
 	Set CNT=MAX_"** "_MAX_" nodes printed **" Quit
        ; 
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35962758
newbie'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
класс %SYS.GlobalQuery запрос DirectoryList,
cache версии 2008
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35963216
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для глобала где в узлах содержится много значений, очень удобно пропустить их через
запятых и парсить только выбраное значение. Например ^AHH(1,2008,3,9,"ST",1)=
^AHH(,,,,"ST" - только узлы где содержится "ST" ... Можно и так, но как-то нестандартно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ArrayFilter(Var,Filter,Nod,Er)	;Parsing(Filtering) select Global  
    K Nod
    Set Nr= 0 
    For dm= 1 : 1  Set Var=$Q(@Var) Quit:Var=""  Do
    . If (Var[Filter)!(@Var[Filter) Do
    . . Set Nr=Nr+ 1 
    . . Set Nod(Nr)=Var_"="_@Var
    K Var
	Q Nr
	;
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35976896
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Cache за выборку отвечают роутины %G, %GPARCE,
%GOGEN (в терминальном режиме)
%Wgdisp, %Wpglo для GUI

Но тот код меня не устроил (тоны кода)

А нужно было примерно так:

Код: plaintext
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.
;---------------------------------------- 
GlobParse(Mask,Ret,Er) ;; Parse Global Reference
   Set (MM,MM1,MM2,MM3,MM4,ME,N,MM5,MES,ZNAC)=""
   Set GL=Mask If Mask["/" Set Q= 0  Do
 	. For %= 1 : 1 :$L(Mask) Set:$E(Mask,%)="""" Q='Q If 'Q,$E(Mask,%)="/" Set SW=$G(SW)_$E(Mask,%, 999 ),GL=$E(Mask, 1 ,%- 1 )
 	If $E(GL)'="^" Set GL="^"_GL
 	Set GL1=$P(GL,"(")
  	Set MM2=$Q(@GL1),MM1=$Q(@MM2,1)
 	Set COL=$L($P(GL,"(",2),",") 
 	Set STOP=$E(GL,$L(GL))=")" S:STOP GL=$E(GL,1,$L(GL)-1)
 	Set F=$P(GL,"(",2,999),GL=$P(GL,"(")_$S(GL["(":"(",1:""),Q=0 ; G Na:F=""
 	If $E(F)'="""" Set GL=GL_""""
   	If F["" F I= 1 : 1 :COL Set MM=$P(F,",",I) Do
  	. If MM="" Set MM2=$P($P(MM1,"(", 2 ),",",I) Set $P(F,",",I)=MM2_""
  	. If MM'="" Set $P(MM3,",",I)=MM,$P(MM5,",",I)=I  
   	For I=1:1:$L(F) Do
  	. If $E(F,I)="""" Set Q='Q,GL=GL_"""" Q
 	. If $E(F,I)'=","!Q Set GL=GL_$E(F,I) Q
 	. Set GL=GL_$S($E(F,I-1)="""":"",1:"""")_","_$S($E(F,I+1)="""":"",1:"""")
  	Set:$E(GL,$L(GL))'="""" GL=GL_"""" Set GL=GL_")"
        Set GL=$NA(@GL, 999 ) 
 	Set NS=$QL(GL),LS=$QS(GL,NS),LS1=$QS(GL,NS- 1 ),L1="" S:NS L1=$NA(@GL,NS- 1 )
   	For i= 1 : 1  Set GL=$Q(@GL) Q:GL=""  Do
   	. Set NN="",MES="",ZNAC=""
   	. F E= 1 : 1 :COL Set (ZNAC,MES)="" Set MES=$QS(GL,E),ZNAC=$QS(GL,E) If $P(MM3,",",E) Do
   	. . If E'=$P(MM5,",",E)!(ZNAC'=$P(MM3,",",E)) Set NN="*" 
        . . Set (MES,ZNAC)=""
   	. If NN="*" Q
   	. Set Ret(i)=GL_"="_@GL_"|"
  	Q
  ;----------------------------------------

Жаль, что в последнее время большенство пользователей
работают с классами, а про прямого доступа к многомерным
масивам (видно по форуму) очень мало вопросов, хотя это
классика ...

Спасибо всем кто откликнулся.
С праздником Победы !!!
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35976925
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, мало вопросов, потому что с ним меньше проблем :)
С Праздником Победы всех!
...
Рейтинг: 0 / 0
Parsing Global в Cache
    #35978399
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov , так и есть! Присоединяюсь к поздравлениям.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Parsing Global в Cache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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