YarrowSoft

Архив : Re: [cache_ru] Import global Как импортировать файл ? : группа пользователей постреляционной СУБД Cache


[Предыдущее - [cache_ru] Import global Как импортировать файл ?] [Следующее - RE: [cache_ru] Import global Как импортировать файл ?]


Письмо #5238

Тема: Re: [cache_ru] Import global Как импортировать файл ?
Начало этой темы: [cache_ru] Import global Как импортировать файл ?
Это ответ на: [cache_ru] Import global Как импортировать файл ?
Ответ на это письмо: [cache_ru] Работа с каше по модему
От: Алексей Маслов Дата: 09 Октября 2006 21:18

Всем привет!

Слишком много ошибок, чтобы их исправлять :) Привожу полное решение от
Сергея Кривошеева, публиковавшееся когда-то здесь же.
Могу добавить, что для переноса в 5.2 придется глобал %utility
заменить на ^CacheTempJ , а также подправить имена утилит: %Wgr ->
%SYS.Wgr и т.д. Протестировать, конечно же, сперва надо в терминале.

И еще: как представляется, если нужна скорость/компактность файла
экспорта, лучше уж использовать блочный формат (GOF) (тип 7 в
терминологии %Wgs/%Wgr), если же это не критично, то предпочтительнее
XML (т.к. документировано и официально поддерживается начиная с 5.0).

Удачи,
Алексей

= ==
Это работало в каких-то четверках но перестало работать на 100% начиная с кокой-то пятерки :(

В тексте есть использование других наших программ но это можно заменить...

ASYS4 ;Кривошеев С.А.;Системные процедуры и функции;;[ 23/10/2003 8:54 ]
Ri(File,Typ)                           ; * Импорт программ *
N case
; File  - имя файла
; Fetch - строка шаблон
s Typ=$g(Typ,"Cache")
s File=File_":(""RU"")"
S case=$$rload^%Wr(File,Typ,0,0,0,0,0,0)
Q case
Ro(File,Name,Type,Descrip)             ; * Экспорт программ *
N case,type,name
; File    - имя файла
; Name    - имя переменной со списком программ @Name@(i)="rtn.INT"
; Type    - тип программ INT, MAC, OBJ
; Descrip - коментарий
S Name=$G(Name)
S Type=$G(Type,"INT")
S Descrip=$G(Descrip)
S name=$NA(^%utility($J))
I Name'="" K @name M @name=@Name
S type="Cache"
S:Type="OBJ" type="Object"
S case=$$rsave^%Wr(Type,File_":(""NW"")",Descrip,type,0,0,1)
Q case
FetchR(Fetch,Name,Type)                ; * Выбрать программы по шаблону *
N case,name,nam,i
; Fetch - Строка шаблон "rtn,a*,'ab,'ac"
; Name  - имя переменной результата
; Type  - переделывать результат в @Name@(i)=rtn или оставить @Name@(rtn)=""
S Fetch=$G(Fetch,"*")
S Name=$G(Name)
S Type=$G(Type,1)
K:Name'="" @Name
S name=$NA(^%utility($J))
K @name
S case=$$rsel^%Wr(Fetch)
Q:'case 0
I Type=0 M:Name'="" @Name=@name K:Name'="" @name Q case
S:Name="" Name=name
S nam=""
F  S nam=$O(@name@(nam)) Q:(nam="")!(+nam=nam)  S @Name@($I(i))=nam K @name@(nam)
K:Name'=name @name
Q case
Gi(File,Fetch,Scr)                     ; * Импорт глобалов тип 5 Cache *
N case,name,IO
; File  - имя файла
; Fetch - строка шаблон "^glb"_$C(13,10)_"^tmp*"
; Scr   - вывод на экран
S Fetch=$G(Fetch,"*")
S Scr=$G(Scr,0)
S IO=Scr
S case=$$main^%Wgr(File_":(""VR"")",5,Fetch,0,0,0)
Q case
Go(File,Name,Rm,Scr)                   ; * Экспорт глобала тип 5 Cache *
N case,name,IO,RM
; File  - имя файла
; Name  - имя переменной со списком глобалов @Name@(i)="^tmp(1,2"
; Rm    -
; Scr   - вывод на экран
S Name=$G(Name)
S Rm=$G(Rm,80)
S Scr=$G(Scr,0)
S name=$NA(^%utility($J))
M:Name'="" @name=@Name
S IO=Scr
S RM=Rm
S case=$$main^%Wgs(File_":(""VNW"")",5,"",0,0)
Q case
Gif(File,Del,Fetch,Name,Scr)           ; * Импорт глобалов тип 7 Cache Block *
N case,name,IO
; File  - имя файла
; Del   - удалять глобалы
; Fetch - строка шаблон "^glb"_$C(13,10)_"^tmp*"
; Name  - имя переменной со списком глобалов @Name@("glb")=""
; Scr   - вывод на экран
S Fetch=$G(Fetch,"*")
S Name=$G(Name)
S Scr=$G(Scr,0)
S Del=$G(Del,1)
S name=$NA(^%utility($J))
S IO=Scr
D Gif1
Q:case=0 0
D:Del Gif2
S case=$$main^%Wgr(File_":(""RU"")",7,Fetch,0,0,0)
Q case
Gif2                                   ; удаление глобалов
N var,nam
S var=""
F  S nam=$O(@name@(var)) Q:var=""  S nam="^"_var K @nam
Q
Gif1                                   ; прочитать заголовок из файла
N i,r
S case=$$header^%Wgr(File_":(""UR"")",7,0)
Q:case=0
I Name'="" Q:Name=1  K @name M @name=@Name Q
S case=$P(case,$C(22,35,1),2)
K @name
S r=$C(19,94,1)
F i=1:1:$L(case,r)-1 S @name@($P(case,r,i))=""
Q
Gof(File,Comment,Name,Scr)             ; * Экспорт глобалов тип 7 Cache Block *
N case,name,IO
; File    - имя файла
; Comment - строка коментария к данным
; Name    - имя переменной со списком глобалов @Name@(i)="^glb"
; Scr     - вывод на экран
S Comment=$G(Comment)
S Name=$G(Name)
S Scr=$G(Scr,0)
S name=$NA(^%utility($J))
M:Name'="" @name=@Name
S IO=Scr
S case=$$main^%Wgs(File_":(""WNU"")",7,Comment,0,0)
Q case
GoMSM(Fetch,File,Scr)                  ; * Экспорт глобалов в формате %GS MSM *
n ok,name,glb,i
s Scr=$g(Scr,1)
s File=$$FOpen^ASYS(File)
i File="" q:$q 0 q
s ok=$$FetchG(Fetch)
i 'ok q:$q 0 q
S name=$NA(^%utility($J))
w:Scr !,"Запись глобалов",!
d BEGTXT
s i=0
s glb=""
f  s glb=$o(@name@(glb)) q:glb=""  d NEWGLB
d END("**")
c File
w !,"Запись завершена! Записан(о) ",i," глобал(а)"
q:$q 1
q
BEGTXT                                 ; Начальный текст
n txt
s txt=$$Time^zfunc()_" "_$$Date^zfunc()_" OOO NTC Air, 2003"
d USE^ASYS3(File)
w txt,!
w "",!
d USE^ASYS3()
q
NEWGLB                                 ; Очередной глобал
n uz,val
s i=i+1
s uz=@name@(glb)
w $$PadR^zfunc(uz,10)
s val=$d(@uz)
i (val=1)!(val=11) d W(uz)
f  s uz=$q(@uz) q:uz=""  d W(uz)
d END("*")
q
END(Txt)                               ; Записать концовку
d USE^ASYS3(File)
w Txt,!
w Txt,!
d USE^ASYS3()
q
W(Name)                                ; Запись узла
d USE^ASYS3(File)
w Name,!
w @Name,!
d USE^ASYS3()
q
FetchG(Fetch,Name,Type)                ; * Выбрать глобалы по шаблону *
N count,name,i,nam
; Fetch - Строка шаблон "glb;a*;'ab;'ac"
; Name  - имя переменной результата
; Type  - переделывать результат в @Name@(i)=glb или оставить @Name@(glb)=""
S Fetch=$G(Fetch,"*")
S Name=$G(Name)
S Type=$G(Type,1)
K:Name'="" @Name
S name=$NA(^%utility($J))
K @name
S count=$$Fetch^%GD(Fetch,1,0)
I $I=2 K ^%utility("SPOOL")
Q:'count 0
I Type=0 M:Name'="" @Name=@name K:Name'="" @name Q count
S:Name="" Name=name
S nam=""
F  S nam=$O(@name@(nam)) Q:(nam="")!(+nam=nam)  S:$D(@nam) @Name@($I(i))=nam K @name@(nam)
K:Name'=name @name
Q count


[2000|2001|2002|2003|2004|2005|2006|2007|2008] [Январь|Февраль|Март|Апрель|Май|Июнь]
[01|02|03|04|05|06]