Автоматическая транслитерация

0 голосов
спросил 25 Фев, 06 от Levran1 (4,060 баллов) в категории Программные продукты Esri
Добрый день! Кто видел скрипты для автоматической транслитерации названий объектов в таблице? Всем спасибо???

9 Ответы

0 голосов
ответил 25 Фев, 06 от Ivan_999 (2,900 баллов)
если в течении недели никто не ответит, я тебе напишу скрипт, прость сейчас времени нет...
0 голосов
ответил 26 Фев, 06 от Гость (210,080 баллов)
Отлично! Большое спасибо - буду  ждать....
0 голосов
ответил 27 Фев, 06 от Ivan_999 (2,900 баллов)

tb=av.getactiveDOC
if (tb.getclass.getclassname<>"table") then MSGBOX.INFO("no active table selected","translytor") EXIT end
tv=tb.getVtab
tv.seteditable(true)
LF=tv.getFields
for each I in 0..(LF.Count-1)
if (LF.get(I).GetType=#FIELD_CHAR) then
for each R in 0..(tv.getNumrecords-1)
ST=tv.returnValue(LF.get(I),R)
ST.LCase
for each N in 0..(ST.Count-1)
if (ST.Middle(N,4)="shch") then ST1=ST.Left(N)+"ù"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="zh") then ST1=ST.Left(N)+"æ"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="ch") then ST1=ST.Left(N)+"÷"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="sh") then ST1=ST.Left(N)+"ø"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="e'") then ST1=ST.Left(N)+"ý"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="yu") then ST1=ST.Left(N)+"þ"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="ya") then ST1=ST.Left(N)+223.AsChar+ST.right(ST.Count-(N+2)) ST1.Lcase ST1.Proper ST=ST1 end
end'N

ST=ST.Translate("a","à")
ST=ST.Translate("b","á")
ST=ST.Translate("v","â")
ST=ST.Translate("g","ã")
ST=ST.Translate("d","ä")
ST=ST.Translate("e","å")
ST=ST.Translate("z","ç")
ST=ST.Translate("i","è")
ST=ST.Translate("j","é")
ST=ST.Translate("k","ê")
ST=ST.Translate("l","ë")
ST=ST.Translate("m","ì")
ST=ST.Translate("n","í")
ST=ST.Translate("o","î")
ST=ST.Translate("p","ï")
ST=ST.Translate("r","ð")
ST=ST.Translate("s","ñ")
ST=ST.Translate("t","ò")
ST=ST.Translate("u","ó")
ST=ST.Translate("f","ô")
ST=ST.Translate("h","õ")
ST=ST.Translate("c","ö")
ST=ST.Translate("`","ü")
ST=ST.Translate("y","û")
ST=ST.Translate("""".Middle(0,1),"ú")
'.Quote

tv.setValue(LF.get(I),R,ST)
end'R
end'if
end'I
tv.seteditable(false)

 

всетаки лучше проверять правильность перевода, и одна мелоч незнаю как у тебя, но у меня почемуто черех Avenu маленькая буква "я" не пишется только большая, так что если че то вручную исправлять придется, самое интерестное что в ручную то пишется. (в 18-й строке 255 = "я" 223="Я")

0 голосов
ответил 27 Фев, 06 от Ivan_999 (2,900 баллов)
блин, только при переносе скрипта русские буквы испортились, в ковычках подставиш нормальные русские буквы, кроме баквы Я
0 голосов
ответил 02 Март, 06 от Гость (210,080 баллов)
понял... пробую. Огромное спасибо
0 голосов
ответил 09 Март, 06 от Levran1 (4,060 баллов)
(ST.Middle(N,2)="ya") then ST1=ST.Left(N)+223.AsChar+ST.right(ST.Count-(N+2)) ST1.Lcase ST1.Proper ST=ST1

почему в этой строке выдает ошибку? у меня вообще букву я не пишет, только выдает черную палочку.
Да еще буквы пришлось поменять местами: ST=ST.Translate("б","b") вместо ST=ST.Translate("b","б") image
ну это так к слову..
Что нужно добавить, чтобы переводил не весь файл целиком, а только выбранное поле...???

0 голосов
ответил 09 Март, 06 от Ivan_999 (2,900 баллов)

тут два момента с буквой Я код 223 - это большая буква Я она должна рисоватся а код 255 это маленькая буква я она не пишется а вместь ее палочка ставится это уже личные притензии Arcview к русскому языку.

а по поводу перевода только одного поля щаЗ слепим.

0 голосов
ответил 09 Март, 06 от Ivan_999 (2,900 баллов)

(ST.Middle(N,2)="ya") then ST1=ST.Left(N)+223.AsChar+ST.right(ST.Count-(N+2)) ST1.Lcase ST1.Proper ST=ST1

почему в этой строке выдает ошибку? у меня вообще букву я не пишет, только выдает черную палочку.
Да еще буквы пришлось поменять местами: ST=ST.Translate("б","b") вместо ST=ST.Translate("b","б") image
ну это так к слову..
Что нужно добавить, чтобы переводил не весь файл целиком, а только выбранное поле...???

Если посмотриш в оригенал скрипта там по поводу буквы Б так и написано

а 18 строка, если правильно понял, должна начинатся с if и заканчиватся End

 

 

0 голосов
ответил 09 Март, 06 от Ivan_999 (2,900 баллов)

tb=av.getactiveDOC
if (tb.getclass.getclassname<>"table") then MSGBOX.INFO("no active table selected","translytor") EXIT end
tv=tb.getVtab
tv.seteditable(true)
LLL=tv.getFields
LF={MsgBox.List (LLL, "Select a Field", "Translaytor")}
for each I in 0..(LF.Count-1)
if (LF.get(I).GetType=#FIELD_CHAR) then
for each R in 0..(tv.getNumrecords-1)
ST=tv.returnValue(LF.get(I),R)
ST.LCase
for each N in 0..(ST.Count-1)
if (ST.Middle(N,4)="shch") then ST1=ST.Left(N)+"ù"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="zh") then ST1=ST.Left(N)+"æ"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="ch") then ST1=ST.Left(N)+"÷"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="sh") then ST1=ST.Left(N)+"ø"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="e'") then ST1=ST.Left(N)+"ý"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="yu") then ST1=ST.Left(N)+"þ"+ST.right(ST.Count-(N+2)) ST=ST1 end
if (ST.Middle(N,2)="ya") then ST1=ST.Left(N)+223.AsChar+ST.right(ST.Count-(N+2)) ST1.Lcase ST1.Proper ST=ST1 end
end'N

ST=ST.Translate("a","à")
ST=ST.Translate("b","á")
ST=ST.Translate("v","â")
ST=ST.Translate("g","ã")
ST=ST.Translate("d","ä")
ST=ST.Translate("e","å")
ST=ST.Translate("z","ç")
ST=ST.Translate("i","è")
ST=ST.Translate("j","é")
ST=ST.Translate("k","ê")
ST=ST.Translate("l","ë")
ST=ST.Translate("m","ì")
ST=ST.Translate("n","í")
ST=ST.Translate("o","î")
ST=ST.Translate("p","ï")
ST=ST.Translate("r","ð")
ST=ST.Translate("s","ñ")
ST=ST.Translate("t","ò")
ST=ST.Translate("u","ó")
ST=ST.Translate("f","ô")
ST=ST.Translate("h","õ")
ST=ST.Translate("c","ö")
ST=ST.Translate("`","ü")
ST=ST.Translate("y","û")
ST=ST.Translate("""".Middle(0,1),"ú")
'.Quote

tv.setValue(LF.get(I),R,ST)
end'R
end'if
end'I
tv.seteditable(false)

Вместо 19 строки можно сделать такое -

if (ST.Middle(N,2)="ya") then ST1=ST.Left(N)+"я"+ST.right(ST.Count-(N+2)) ST=ST1 end

 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...