Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3952 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нагуглил скрипт транслитерации через vbs и пытаюсь приспособить его под свои нужды, но что-то не выходит каменный цветок.
Код:
Set objArgs = WScript.Arguments
 
MsgBox translit(objArgs(I))
 
Dim tr, tl
tr="а б в г д е ё  ж  з и й  к л м н о п р с т у ф х  ц ч  ш  щ   ъ  ы ь э  ю  я  А Б В Г Д Е Ё  Ж  З И Й  К Л М Н О П Р С Т У Ф Х  Ц Ч  Ш  Щ   Ъ  Ы Ь Э  Ю  Я  "
tl="аaбbвvгgдdеeёjoжzhзzиiйjjкkлlмmнnоoпpрrсsтtуuфfхkhцcчchшshщshhъ''ыyь'эehюjuяjaАAБBВVГGДDЕEЁJoЖZhЗZИIЙJjКKЛLМMНNОOПPРRСSТTУUФFХKhЦCЧChШShЩShhЪ''ЫYЬ'ЭEhЮJuЯJa"
 
'=============================================================================
' функция транслитерации строки по ГОСТ 7.79 2000
Function translit(ByVal sIncoming)
    Dim pos, findpos, sSymbol
     
    translit=""
 
    For pos = 1 To len(sIncoming) Step 1
 
        sSymbol=mid(sIncoming,pos,1)
        findpos=InStr(1, tr, sSymbol)
        If findpos=0 or sSymbol=" " Then
            ' ***** В транслитерации не нуждается
            translit=translit+sSymbol
        Else
            ' ***** Первый символ
            translit=translit+mid(tl,findpos+1,1)
            ' ***** Второй символ
            If mid(tr,findpos+2,1)=" " Then
                translit=translit+mid(tl,findpos+2,1)
                ' ***** Третий символ
                If mid(tr,findpos+3,1)=" " Then
                    translit=translit+mid(tl,findpos+3,1)
                End If
            End If
        End If
    Next
End Function
Скармливаю скрипту через консоль кириллицу, её же на выходе в msgbox'e и получаю. ЧЯДНТ ? Вродеифункцию верно применяю.

Всего записей: 1490 | Зарегистр. 19-09-2011 | Отправлено: 08:15 26-07-2020
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
этот код

Код:
Set objArgs = WScript.Arguments  
MsgBox translit(objArgs(I))  

попробуйте после процедуры добавить(после End Function)
 
Добавлено:
 

Всего записей: 2533 | Зарегистр. 14-08-2005 | Отправлено: 09:22 26-07-2020
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Baltazar500
У Вас MsgBox перед назначением глобальных переменных. Вместо которых, кстати, я бы использовал константы в теле функции.Подробнее...

Всего записей: 1789 | Зарегистр. 07-08-2002 | Отправлено: 09:25 26-07-2020
a929151

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
msgbox Rus2Lat("бля")
Function Rus2Lat(strRus)
    Dim i
    Dim strTemp
    Dim strLat
    For i = 1 To Len(strRus)
        strTemp = Mid(strRus, i, 1)              
        Select Case strTemp
            Case "а"
                strLat = strLat & "a"
            Case "А"
                strLat = strLat & "A"
            Case "б"
                strLat = strLat & "b"
            Case "Б"
                strLat = strLat & "B"
            Case "в"
                strLat = strLat & "v"
            Case "В"
                strLat = strLat & "V"
            Case "г"
                strLat = strLat & "g"
            Case "Г"
                strLat = strLat & "G"
            Case "д"
                strLat = strLat & "d"
            Case "Д"
                strLat = strLat & "D"
            Case "е"
                strLat = strLat & "e"
            Case "Е"
                strLat = strLat & "E"
            Case "ё"
                strLat = strLat & "yo"
            Case "Ё"
                strLat = strLat & "Yo"
            Case "ж"
                strLat = strLat & "zh"
            Case "Ж"
                strLat = strLat & "Zh"
            Case "з"
                strLat = strLat & "z"
            Case "З"
                strLat = strLat & "Z"
            Case "и"
                strLat = strLat & "i"
            Case "И"
                strLat = strLat & "I"
            Case "й"
                strLat = strLat & "i"
            Case "Й"
                strLat = strLat & "I"
            Case "к"
                strLat = strLat & "k"
            Case "К"
                strLat = strLat & "K"
            Case "л"
                strLat = strLat & "l"
            Case "Л"
                strLat = strLat & "L"
            Case "м"
                strLat = strLat & "m"
            Case "М"
                strLat = strLat & "M"
            Case "н"
                strLat = strLat & "n"
            Case "Н"
                strLat = strLat & "N"
            Case "о"
                strLat = strLat & "o"
            Case "О"
                strLat = strLat & "O"
            Case "п"
                strLat = strLat & "p"
            Case "П"
                strLat = strLat & "P"
            Case "р"
                strLat = strLat & "r"
            Case "Р"
                strLat = strLat & "R"
            Case "с"
                strLat = strLat & "s"
            Case "С"
                strLat = strLat & "S"
            Case "т"
                strLat = strLat & "t"
            Case "Т"
                strLat = strLat & "T"
            Case "у"
                strLat = strLat & "u"
            Case "У"
                strLat = strLat & "U"
            Case "ф"
                strLat = strLat & "f"
            Case "Ф"
                strLat = strLat & "F"
            Case "х"
                strLat = strLat & "kh"
            Case "Х"
                strLat = strLat & "Kh"
            Case "ц"
                strLat = strLat & "ts"
            Case "Ц"
                strLat = strLat & "Ts"
            Case "ч"
                strLat = strLat & "ch"
            Case "Ч"
                strLat = strLat & "Ch"
            Case "ш"
                strLat = strLat & "sh"
            Case "Ш"
                strLat = strLat & "Sh"
            Case "щ"
                strLat = strLat & "sch"
            Case "Щ"
                strLat = strLat & "Sch"
            Case "ъ"
                strLat = strLat & ""
            Case "Ъ"
                strLat = strLat & ""
            Case "ы"
                strLat = strLat & "y"
            Case "Ы"
                strLat = strLat & "Y"
            Case "ь"
                strLat = strLat & ""
            Case "Ь"
                strLat = strLat & ""
            Case "э"
                strLat = strLat & "e"
            Case "Э"
                strLat = strLat & "E"
            Case "ю"
                strLat = strLat & "yu"
            Case "Ю"
                strLat = strLat & "Yu"
            Case "я"
                strLat = strLat & "ya"
            Case "Я"
                strLat = strLat & "Ya"
            Case Else
                'unknown symbol
                strLat = strLat & strTemp
        End Select
    Next
    Rus2Lat = strLat
    End Function
 

Всего записей: 1076 | Зарегистр. 30-03-2016 | Отправлено: 12:32 26-07-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500

Цитата:
Нагуглил скрипт транслитерации через vbs и пытаюсь приспособить его под свои нужды

есть скрипт на powershell, транслитерация в обе стороны, работает по ГОСТ 7.79-2000 тип Б
скрипт

Всего записей: 3006 | Зарегистр. 03-02-2009 | Отправлено: 15:33 26-07-2020
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks,
Цитата:
попробуйте после процедуры добавить(после End Function)
Спасибо, всё отработало корректно.
 
Alex_Piggy, привет. Спасибо. В vbs я откровенно плаваю т.к. редко им пользуюсь, но вот понадобился костыль для транслита кириллицы в латинницу и я начал искать решения на vbs, т.к. batch-решения мне показались слишком уж монструозными. Когда не удалось заставить работать vbs-скрипт, я решил попробовать js-скрипт, на основе которого был написан тот vbs. И его таки удалось сходу завести А там кода по сравнению с vbs-скриптом ещё меньше, поэтому я на нём и остановился. Тем не менее к vbs'ке решил вернуться, дабы разобраться, где просчитался. Всё же, разобрал на примере данного скрипта, как в vbs работают функции и было бы жалко терять наработанный опыт и хотелось его окончательно закрепить, заставив скрипт работать как задумано
 
a929151, спасибо, но имхо, кода многовато
 
YuS 2, спасибо. Возможно данное решение пригодится позднее, в данный момент с powershell'ом дела у меня обстоят совсем никак, плюс мне сейчас достаточно перегона текста ru => en.
 
Т.к. с транслитерацией вопрос был успешно решён, остался вопрос, как бы это всё дело покеорректней интегрировать в bat. Например тот же js-скрипт, даже будучи в PATH-директории не вызывается из bat и до него надо прописывать полный путь, отдавая его интерпретатору cscript. Есть возможность запускать js-скрипт с вводными данными, но без указания дополнительных путей (что там с vbs происходит в данном случае, я пока не проверял) ?

Всего записей: 1490 | Зарегистр. 19-09-2011 | Отправлено: 04:13 27-07-2020
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Baltazar500
Вариант 1 - Настраиваете под себя cscript. Например, после команды "cscript /nologo /h:cscript /s" все скрипты будут выполняться в cscript без logo. И выполняете как экзешник
for /f "delims=" %%i in ('testme.js "проверка"') do echo %%i  
Возврат к умолчаниям - "cscript /h:wscript /s"
Вариант 2 - ищете полный путь скрипта в PATH и в дальнейшем используете его.
for %%i in ("testme.js") do set "testme.js=%%~f$PATH:i"
for /f "delims=" %%i in ('cscript //nologo "%testme.js%" "проверка"') do echo %%i

Всего записей: 1789 | Зарегистр. 07-08-2002 | Отправлено: 08:04 27-07-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Переключатель раскладки - translit.hta
Немного о своём, может пригодится, принцип тот же, можно добавить транслитерацию, раз уж ошибся с вопросом.

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 19:04 27-07-2020 | Исправлено: VVL99, 01:09 29-07-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теперь два в одном - https://jpegshare.net/images/17/45/17451e33c47169b4f2c2874a3ea90329.png
Осталось потестить - https://transfiles.ru/cm3qk

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 04:48 28-07-2020 | Исправлено: VVL99, 13:55 28-07-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99

Цитата:
Осталось потестить


Код:
'ABVGDEYOZHZIKLMNOPRSTUFXCCHSHSHH``Y``E`YUYA - abvgdeyozhziklmnoprstufxcchshshh``y``e`yuya'

транслитерирует как:

Код:
'АБВГДЕYОЗHЗИКЛМНОПРСТУФХССHСHСHHъЫьЭYУYА - абвгдеёжзиклмнопрстуфхсчшщъыьэюя'

 
а это:

Код:
'ABVGDEYoZhZIKLMNOPRSTUFXCzChShShhЪY`ЬE`YuYa - abvgdeyozhziklmnoprstufxczchshshh``y``e`yuya'

- совсем не хочет транслитерировать...

Всего записей: 3006 | Зарегистр. 03-02-2009 | Отправлено: 06:16 28-07-2020 | Исправлено: YuS 2, 06:19 28-07-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Да, я сделал автоопределение направления, если есть кириллица, то выбирается Ru-En, т.е. латинские символы не будут меняться, даже если там всего один кириллический символ.
Если что я брал транслит здесь.
 
Добавлено:
Добавил переключатель направления
И ещё для удобства добавил кнопку "Из буфера", чтобы быстро вставлять текст

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 13:33 28-07-2020 | Исправлено: VVL99, 19:25 28-07-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подписал поля, добавил кнопку стирания и добавил возможность сразу печатать транслитерацией с учётом выбранного направления, если установлена галочка, добавил двойные заглавные типа; YU, YA...
https://transfiles.ru/8wo5v
https://jpegshare.net/images/d0/ce/d0ce1888f8d08b44045addca15ce2cea.png
Обновил и отправил в тему - http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=50401&start=20#21

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 19:05 28-07-2020 | Исправлено: VVL99, 03:11 29-07-2020
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy, спасибо. Больше всего подошёл первый вариант Плюс после ребута js-скрипт из PATH через cmd таки стал вызываться, но естественно, без корректировки настроек cscript echo - выдача шла в виде попапов.

Всего записей: 1490 | Зарегистр. 19-09-2011 | Отправлено: 04:09 31-07-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Переключатель языка ввода .JS
Код:
var A = WScript.CreateObject("WScript.Shell"),
HK = A.RegRead("HKCU\\Keyboard Layout\\Toggle\\Hotkey");
switch(HK) {
    case "1": HK = "%+";
        break
    case "2": HK = "^+";
        break
    case "4": HK = "`";
        break
};
A.SendKeys(HK);

Можете ругаться, если что.
   
И тогда вот ещё переключатель, возвращает в данном случае Eng.
Код:
var fso = new ActiveXObject("Scripting.FileSystemObject"),
A = WScript.CreateObject("WScript.Shell"),
HK = A.RegRead("HKCU\\Keyboard Layout\\Toggle\\Hotkey");
f = fso.OpenTextFile("temp.txt", 2, !0);
f.Close();
WScript.Sleep(50);
A.Run("notepad temp.txt");
A.AppActivate("notepad");
WScript.Sleep(50);
A.SendKeys("a");
WScript.Sleep(50);
A.SendKeys("%");
WScript.Sleep(50);
A.SendKeys("{ENTER}");
WScript.Sleep(50);
A.SendKeys("{DOWN}");
A.SendKeys("{DOWN}");
A.SendKeys("{ENTER}");
WScript.Sleep(50);
A.Run("taskkill /F /IM notepad.exe", 0);
WScript.Sleep(50);
f = fso.OpenTextFile("temp.txt", 1, !0);
var r = f.ReadAll();
switch(HK) {
    case "1": HK = "%+";
        break
    case "2": HK = "^+";
        break
    case "4": HK = "`";
        break
};
r != "a" && A.SendKeys(HK);
//WScript.Sleep(50);
//A.Run("адрес файла");

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 20:18 31-07-2020 | Исправлено: VVL99, 01:31 01-08-2020
VVL99



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
http://forum.ru-board.com/topic.cgi?forum=5&topic=46779&start=320#15

Всего записей: 3576 | Зарегистр. 03-02-2011 | Отправлено: 02:36 01-08-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru