Любой язык - Транслитерация текста CHGSTR.EXE

Аватара пользователя
kdolzhanskiy@vk

Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение kdolzhanskiy@vk »

Уважаемые знатоки, помогите разобраться с использованием bat для транслитерации содержимого текстового файла (расширение txt) в латиницу (UPPER CASE), который получается при парсинге xml. Используется для последующей отправки в RDS-кодер радиостанции. Навык "научного тыка" не помог.

Содержимое меняется в зависимости от проигрываемого трека, но всегда состоит из "Название артиста - название песни".



К примеру:

содержимое OnAir.txt: Malika Yes - Ойнамаймын сенімен

Нужно чтобы попало в новый файл OnAir_convert.txt: MALIKA YES - OYNAMAYIN SENIMEN



А в случае если латиница присутствует ничего не менять кроме регистра:

OnAir.txt: Azamat - Araiym

>OnAir_convert.txt:AZAMAT - ARAIYM



Нашел в одной из старинных веток подсказку что это можно сделать через bat и CHGSTR.EXE, но не смог осилить. Операционка Win10 и Win7



Код:

Код: Выделить всё

@echo off
set file=text.txt
copy %file% %file%.bak
CHGSTR "*" "a" %file%
CHGSTR "Ў" "b" %file%
CHGSTR "ў" "v" %file%
CHGSTR "Ј" "g" %file%
CHGSTR "¤" "d" %file%
CHGSTR "Ґ" "e" %file%
CHGSTR "с" "e" %file%
CHGSTR "¦" "zh" %file%
CHGSTR "§" "z" %file%
CHGSTR "Ё" "i" %file%
CHGSTR "©" "io" %file%
CHGSTR "Є" "k" %file%
CHGSTR "«" "l" %file%
CHGSTR "¬" "m" %file%
CHGSTR "*" "n" %file%
CHGSTR "®" "o" %file%
CHGSTR "Ї" "p" %file%
CHGSTR "а" "r" %file%
CHGSTR "б" "s" %file%
CHGSTR "в" "t" %file%
CHGSTR "г" "u" %file%
CHGSTR "д" "f" %file%
CHGSTR "е" "h" %file%
CHGSTR "ж" "c" %file%
CHGSTR "з" "ch" %file%
CHGSTR "и" "sh" %file%
CHGSTR "й" "sh" %file%
CHGSTR "к" "!" %file%
CHGSTR "л" "i" %file%
CHGSTR "м" "!" %file%
CHGSTR "н" "e" %file%
CHGSTR "о" "yu" %file%
CHGSTR "п" "ya" %file%
CHGSTR "Ђ" "A" %file%
CHGSTR "Ѓ" "B" %file%
CHGSTR "‚" "V" %file%
CHGSTR "ѓ" "G" %file%
CHGSTR "„" "D" %file%
CHGSTR "…" "E" %file%
CHGSTR "р" "E" %file%
CHGSTR "†" "ZH" %file%
CHGSTR "‡" "Z" %file%
CHGSTR "€" "I" %file%
CHGSTR "‰" "IO" %file%
CHGSTR "Љ" "K" %file%
CHGSTR "‹" "L" %file%
CHGSTR "Њ" "M" %file%
CHGSTR "Ќ" "N" %file%
CHGSTR "Ћ" "O" %file%
CHGSTR "Џ" "P" %file%
CHGSTR "ђ" "R" %file%
CHGSTR "‘" "S" %file%
CHGSTR "’" "T" %file%
CHGSTR "“" "U" %file%
CHGSTR "”" "F" %file%
CHGSTR "•" "H" %file%
CHGSTR "–" "C" %file%
CHGSTR "—" "CH" %file%
CHGSTR "?" "SH" %file%
CHGSTR "™" "SH" %file%
CHGSTR "љ" "!" %file%
CHGSTR "›" "I" %file%
CHGSTR "њ" "!" %file%
CHGSTR "ќ" "E" %file%
CHGSTR "ћ" "YU" %file%
CHGSTR "џ" "YA" %file%
Аватара пользователя
Iska

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение Iska »

kdolzhanskiy@vk, xml — это, скорее всего, какой-нибудь UTF-8, не?



Лучше упакуйте несколько xml в архив, каковой приложите к сообщению, и опишите, что оттуда надо извлекать.
Аватара пользователя
Iska

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение Iska »

Цитата kdolzhanskiy@vk:



Операционка Win10 и Win7
Любой язык - Транслитерация текста CHGSTR.EXE




лучше сразу на powershell:



Код:

Код: Выделить всё

function global:translit {
	process {
		$charr = @{
			[char]'А' = "A"
			[char]'а' = "a"
			[char]'Б' = "B"
			[char]'б' = "b"
			[char]'В' = "V"
			[char]'в' = "v"
			[char]'Г' = "G"
			[char]'г' = "g"
			[char]'Д' = "D"
			[char]'д' = "d"
			[char]'Е' = "E"
			[char]'е' = "e"
			[char]'Ё' = "E"
			[char]'ё' = "e"
			[char]'Ж' = "ZH"
			[char]'ж' = "zh"
			[char]'З' = "Z"
			[char]'з' = "z"
			[char]'И' = "I"
			[char]'и' = "i"
			[char]'Й' = "I"
			[char]'й' = "i"
			[char]'К' = "K"
			[char]'к' = "k"
			[char]'Л' = "L"
			[char]'л' = "l"
			[char]'М' = "M"
			[char]'м' = "m"
			[char]'Н' = "N"
			[char]'н' = "n"
			[char]'О' = "O"
			[char]'о' = "o"
			[char]'П' = "P"
			[char]'п' = "p"
			[char]'Р' = "R"
			[char]'р' = "r"
			[char]'С' = "S"
			[char]'с' = "s"
			[char]'Т' = "T"
			[char]'т' = "t"
			[char]'У' = "U"
			[char]'у' = "u"
			[char]'Ф' = "F"
			[char]'ф' = "f"
			[char]'Х' = "KH"
			[char]'х' = "kh"
			[char]'Ц' = "TC"
			[char]'ц' = "tc"
			[char]'Ч' = "CH"
			[char]'ч' = "ch"
			[char]'Ш' = "SH"
			[char]'ш' = "sh"
			[char]'Щ' = "SHCH"
			[char]'щ' = "shch"
			[char]'Ъ' = ""
			[char]'ъ' = ""
			[char]'Ы' = "Y"
			[char]'ы' = "y"
			[char]'Ь' = ""
			[char]'ь' = ""
			[char]'Э' = "E"
			[char]'э' = "e"
			[char]'Ю' = "YU"
			[char]'ю' = "yu"
			[char]'Я' = "YA"
			[char]'я' = "ya"
		}
		$_.tochararray()|%{
			if ($charr[$_] -cne $null){
				$arr += $charr[$_]
			} else {
				$arr += $_
			}
		}
		write-output $arr
	}
}

- это функция. Можно в профиль добавить, затем использовать в любом месте, либо в скрипт добавить и использовать в нем.



Применять так (при условии добавления в профиль):



Код:

Код: Выделить всё

(gc onair.txt -enc utf8 -raw|translit).toupper()|out-file onair_convert.txt -enc utf8

При желании, можно и из батника запускать...



Код:

Код: Выделить всё

@echo off
powershell -ex bypass -c "&{(gc onair.txt -enc utf8 -raw|translit).toupper()|out-file onair_convert.txt -enc utf8}"
pause&exit /b

ЗЫ В десятке будет работать сразу, а в семерке - powershell лучше сразу обновить до версии 5.1
Аватара пользователя
Iska

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение Iska »

Цитата Iska:



Лучше упакуйте несколько xml в архив, каковой приложите к сообщению, и опишите, что оттуда надо извлекать.
Любой язык - Транслитерация текста CHGSTR.EXE




По счастью извлечение из xml - пройденный этап. Вопрос именно в транслите того. что получается, а именно содержимого текстового фала из одной строки
Аватара пользователя
kdolzhanskiy@vk

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение kdolzhanskiy@vk »

Цитата YuS_2:



лучше сразу на powershell:
Любой язык - Транслитерация текста CHGSTR.EXE




Сохранил как скрипт. Выдает ошибку.



Код:

Код: Выделить всё

PS C:\WINDOWS\system32> F:\auto\translit.ps1
F:\auto\translit.ps1:7 знак:11
+             [char]'Р=±' = "b"
+                    ~
Отсутствует оператор ''='' после ключа в хэш-литерале.
F:\auto\translit.ps1:71 знак:19
+         $_.tochararray()|%{
+                         ~
Отсутствует оператор ''='' после ключа в хэш-литерале.
F:\auto\translit.ps1:2 знак:10
+     process {
+             ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
F:\auto\translit.ps1:1 знак:26
+ function global:translit {
+                          ~
Отсутствует закрывающий знак "}" в блоке операторов или определении типа.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEqualsInHashLiteral
Аватара пользователя
kdolzhanskiy@vk

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение kdolzhanskiy@vk »

kdolzhanskiy@vk, кодировка. Уж если сохраняете скрипт в UTF-8 — добавляйте BOM (а правильнее — сохраняйте в UTF-16LE/1200 с BOM или в ANSI/1251).



P.S. «-enc utf8» в коде коллеги YuS_2 в Вашем случае (ANSI/1251) нужно заменить на «-Encoding default».
Аватара пользователя
Iska

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение Iska »

Цитата Iska:



P.S. «-enc utf8» в коде коллеги YuS_2 в Вашем случае (ANSI/1251) нужно заменить на «-Encoding default».
Любой язык - Транслитерация текста CHGSTR.EXE




Это да, но скорее, выбор кодировки уже будет зависеть от кодировки самого исходного файла...
Аватара пользователя
YuS_2

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение YuS_2 »

YuS_2, автор выложил пример txt-файла в первом сообщении темы, там ANSI/1251. Это я хотел от него получить xml, предполагая, что там может быть какой-нибудь UTF-8.
Аватара пользователя
Iska

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение Iska »

Цитата Iska:



автор выложил пример txt-файла в первом сообщении темы
Любой язык - Транслитерация текста CHGSTR.EXE




А, точно... упустил из виду и упоминание xml сбило с толку. Тогда да, однозначно default и никаких гвоздей! Изображение
Аватара пользователя
YuS_2

Re: Любой язык - Транслитерация текста CHGSTR.EXE

Сообщение YuS_2 »

kdolzhanskiy@vk, вам нужна не транслитерация. По крайней мере только её недостаточно - разные тире, кавычки, диактрические знаки и прочая расширенную типографику тоже стоит учитывать.



YuS_2, словарь надо в секции begin определять

зачем разные кавычки?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»