Upload
evgeny-shvarov
View
180
Download
4
Embed Size (px)
Citation preview
Перевод базы из 8-бит в Unicode Александр Коблов
В чём разница
Нужно перенести данные и код
• Код: – $system.OBJ.Export()
• Данные – Нужно переконвертировать:
• Строки – Не нужно переконвертировать (всё остальное):
• Числа • $bitstring
– Проблема: строки внутри списков
Те данные, что заведомо не нужно конвертировать
;8 bit USER>write ##class(%Collate).DisplayToLogical("Cache Standard") 5 USER>write ##class(%GlobalEdit).Create(,"Demo",5) 1 USER>merge ^Demo=^a USER>write ##class(%Global).Export(,"Demo","c:\temp\export.gof") ;Unicode USER>do $system.OBJ.Load("c:\temp\export.gof") USER>merge ^GlobalInCorrectColaltion = ^Demo
Что такое collation?
Cache standard ^c("W")=87 ^c("Y")=89 ^c("w")=119 ^c("y")=121 ^c("Ё")=1025 ^c("Б")=1041 ^c("Ж")=1046 ^c("б")=1073 ^c("ж")=1078 ^c("ё")=1105
Cyrillic1 ^c("w")=119 ^c("W")=87 ^c("y")=121 ^c("Y")=89 ^c("б")=1073 ^c("Б")=1041 ^c("ё")=1105 ^c("Ё")=1025 ^c("ж")=1078 ^c("Ж")=1046
Cyrillic3 ^c("W")=87 ^c("Y")=89 ^c("w")=119 ^c("y")=121 ^c("Б")=1041 ^c("Ё")=1025 ^c("Ж")=1046 ^c("б")=1073 ^c("ё")=1105 ^c("ж")=1078
Cyrillic4 ^c("W")=87 ^c("Y")=89 ^c("w")=119 ^c("y")=121 ^c("Б")=1041 ^c("Ё")=1025 ^c("Ж")=1046 ^c("б")=1073 ^c("ё")=1105 ^c("ж")=1078
Collation по умолчанию:
Администрирование > Конфигурация > Настройки поддержки нац. языков > Определение локали
Пример
USER>zwrite ^c // collation – Caché Standard ^c("Ё")=100 ^c("Г")=100 ^c("Ф")=100 USER>merge c=^c USER>zwrite c c("Г")=100 c("Ё")=100 c("Ф")=100
Те данные, что нужно конвертировать
USER>zwrite ^a ^a(1)="русская строка" ^a(2)="english string" ^a(3)=$lb("русская строка",1,1.3,$lb("другая строка"),$double(10))
Нужно как-то сериализовать. Например zwrite
Выгрузка с zwrite
set filename = “c:\temp\export.gbl” set globname = “^SomeGlobal” open filename:("NW":/GZIP=10)
use filename zwrite @globname close filename
Загрузка с zwrite
do DISABLE^%SYS.NOJRN do $system.Process.SetZEOF(1) set filename = “c:\temp\export.gbl”
open filename:(:/GZIP=10) for { use filename read x quit:$ZEOF=-1 xecute "s "_x } close filename
do ENABLE^%SYS.NOJRN
Другие варианты
• Если данные в таблицах – SQL Gateway
And now For something completely different
* — третий аргумент в $Piece, $Extract, $List
;вместо $Piece("a,b,c,d",",",$Length("a,b,c,d",",")) USER>write $Piece("a,b,c,d", ",", *) d USER>write $Piece("a,b,c,d", ",", *-2) b USER>write $Piece("a,b,c,d", "," ,*-2,*) b,c,d USER>set list = $LB("a", "b" ,"c") USER>set $LI(list,*+1) = "d" USER>zwrite list list=$lb("a","b","c","d")
$Data(var, target)
● Вместо: o if $Data(^someval)#10=1 {
set val = ^someval // do some work with val
} o if $Data(^someval,val)#10=1 {
// do some work with val }
$Order(var, dir, target)
● Вместо: o set id = “”
for { set id = $Order(^VendorData(id),1) quit:id=”” set val = ^VendorData(id)
} o set id = “”
for { set id = $Order(^VendorData(id),1, val) quit:id=””
}
Xecute с параметрами
USER>set cmd = "(in,out) set a = in * in, out = a + a“, a = 3 USER>xecute (cmd, a, .b) USER>write a=9 b=18 USER>set cmd = "(in,out) {set a = in * in, out = a + a}“, a = 3 USER>xecute (cmd, a, .b) USER>write a=3 b=18
$ListBuild как l-value
USER>set list = $ListBuild("a","b","c","d","e") USER>set $LB(c1,,c3) = list USER>write c1="a" c3="c" USER>set a=2,b=3 USER>set $LB(a,b) = $LB(b,a) USER>write a," ",b 3 2
insert or update
create table testsql(c1 int primary key, c2 varchar(10)) insert or update into testsql values(10,'ten') insert or update into testsql values(10,'ten') insert or update into testsql values(20,'twenty')
c1 c2 10 ten 20 twenty
%vid как аналог limit
select *,%VID AS SubQueryID from (select top 10 Name,Age from Sample.Person where Age > 75 order by Name) where %VID > 4
Name Age SubQueryID Cooke,Charlotte B. 82 5 Donaldson,Patricia A. 89 6
Gibbs,Brenda R. 83 7 Gore,Violet V. 87 8 Iacobelli,Emma U. 90 9 Isaksen,Marvin B. 76 10
args(1/3)
USER>do ##class(testargs).m1("a","b","c","d") method m1 args=4 args(1)="a" args(2)="b" args(3)="c" args(4)="d"
args(2/3)
>do ##class(testargs).m2("a","b") method m2 args=2 args(1)="a" args(2)="b" method m1 args=4 args(1)="x" args(2)="z" args(3)="a" args(4)="b"
args(3/3)
USER>set args=4, args(1)=100, args(2)=200, args(4)=400 USER>do ##class(testargs).m3(args...) a = 100 b = 200 c = no val d = 400
Спасибо!
Color Palette
This is the standard palette for the template which is used as the default for charts and graphics.