24
Перевод базы из 8-бит в Unicode Александр Коблов

Перевод базы Caché из 8 бит в Unicode

Embed Size (px)

Citation preview

Page 1: Перевод базы Caché из 8 бит в Unicode

Перевод базы из 8-бит в Unicode Александр Коблов

Page 2: Перевод базы Caché из 8 бит в Unicode

В чём разница

Page 3: Перевод базы Caché из 8 бит в Unicode

Нужно перенести данные и код

•  Код: –  $system.OBJ.Export()

•  Данные –  Нужно переконвертировать:

•  Строки –  Не нужно переконвертировать (всё остальное):

•  Числа •  $bitstring

–  Проблема: строки внутри списков

Page 4: Перевод базы Caché из 8 бит в Unicode

Те данные, что заведомо не нужно конвертировать

;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

Page 5: Перевод базы Caché из 8 бит в Unicode

Что такое 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

Page 6: Перевод базы Caché из 8 бит в Unicode

Collation по умолчанию:

Администрирование > Конфигурация > Настройки поддержки нац. языков > Определение локали

Page 7: Перевод базы Caché из 8 бит в Unicode

Пример

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

Page 8: Перевод базы Caché из 8 бит в Unicode

Те данные, что нужно конвертировать

USER>zwrite ^a ^a(1)="русская строка" ^a(2)="english string" ^a(3)=$lb("русская строка",1,1.3,$lb("другая строка"),$double(10))

Нужно как-то сериализовать. Например zwrite

Page 9: Перевод базы Caché из 8 бит в Unicode

Выгрузка с zwrite

set filename = “c:\temp\export.gbl” set globname = “^SomeGlobal” open filename:("NW":/GZIP=10)

use filename zwrite @globname close filename

Page 10: Перевод базы Caché из 8 бит в Unicode

Загрузка с 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

Page 11: Перевод базы Caché из 8 бит в Unicode

Другие варианты

•  Если данные в таблицах – SQL Gateway

Page 12: Перевод базы Caché из 8 бит в Unicode

And now For something completely different

Page 13: Перевод базы Caché из 8 бит в Unicode

* — третий аргумент в $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")

Page 14: Перевод базы Caché из 8 бит в Unicode

$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 }

Page 15: Перевод базы Caché из 8 бит в Unicode

$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=””

}

Page 16: Перевод базы Caché из 8 бит в Unicode

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

Page 17: Перевод базы Caché из 8 бит в Unicode

$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

Page 18: Перевод базы Caché из 8 бит в Unicode

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

Page 19: Перевод базы Caché из 8 бит в Unicode

%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

Page 20: Перевод базы Caché из 8 бит в Unicode

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"

Page 21: Перевод базы Caché из 8 бит в Unicode

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"

Page 22: Перевод базы Caché из 8 бит в Unicode

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

Page 23: Перевод базы Caché из 8 бит в Unicode

Спасибо!

Page 24: Перевод базы Caché из 8 бит в Unicode

Color Palette

This is the standard palette for the template which is used as the default for charts and graphics.