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

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

Спасибо.
...
Рейтинг: 0 / 0
29.04.2009, 16:56
    #35961547
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
$QUERY
...
Рейтинг: 0 / 0
29.04.2009, 17:54
    #35961705
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
Понятно, просто интересует прием типа ^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
30.04.2009, 10:29
    #35962758
newbie'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
класс %SYS.GlobalQuery запрос DirectoryList,
cache версии 2008
...
Рейтинг: 0 / 0
30.04.2009, 12:38
    #35963216
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
Для глобала где в узлах содержится много значений, очень удобно пропустить их через
запятых и парсить только выбраное значение. Например ^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
08.05.2009, 14:46
    #35976896
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
В 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
08.05.2009, 14:55
    #35976925
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
Наверное, мало вопросов, потому что с ним меньше проблем :)
С Праздником Победы всех!
...
Рейтинг: 0 / 0
10.05.2009, 20:20
    #35978399
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parsing Global в Cache
Alexey Maslov , так и есть! Присоединяюсь к поздравлениям.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Parsing Global в Cache / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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