Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Подскажите скрипт или утилиту для перевода текста в txt-файле в другую раскладку (http://forum.oszone.net/showthread.php?t=216258)

Trueman777 23-09-2011 07:44 1758536

Подскажите скрипт или утилиту для перевода текста в txt-файле в другую раскладку
 
Поясняю: например, у меня есть txt-файл с текстом Привет, мне нужен батник или самостоятельная программа, которая создаст мне текстовый файл с содержимым Ghbdtn.

Как я понимаю, нужно просто установить соответствие символов типа "йцукенгшщзхъ..." = "qwertyuiop[]..." и "ЙЦУКЕНГШЩЗХЪ..." = "QWERTYUIOP{}..." и выполнить замену текста.
На крайняк, конечно, можно было бы вручную заменять по одному символу через одноименную функцию в Блокноте, но это, во-первых, сам по себе процесс будет гемморный, а во-вторых, у меня больше 3 млн слов в файле. Блокнот, боюсь, не осилит замену в таком огромном объеме текста. Я состарюсь раньше, чем успею закончить посимвольную замену =(

Спасибо.

sLiDeR-X 23-09-2011 08:48 1758560

Вложений: 1
Держи.

Поправить транслит на свое усмотрение думаю сможешь

Iska 23-09-2011 08:49 1758561

Trueman777, примерно так:
читать дальше »
Код:

Option Explicit

Const ForReading  = 1
Const ForWriting  = 2

Const strLatin    = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./~!@#$^&QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM<>?|"
Const strCyrillic = "ёйцукенгшщзхъфывапролджэячсмитьбю.Ё!""№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,/"

Dim objFSO
Dim objTSSource
Dim objTSDest

Dim objDictionary

Dim strFileNameSource
Dim strFileNameDest

Dim i


strFileNameSource = "E:\Песочница\0076\Source.txt"
strFileNameDest  = "E:\Песочница\0076\Dest.txt"

Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

For i = 1 To Len(strCyrillic)
        objDictionary.Add Mid(strCyrillic, i, 1), Mid(strLatin, i, 1)
Next

Set objFSO        = WScript.CreateObject("Scripting.FileSystemObject")
Set objTSSource  = objFSO.OpenTextFile(strFileNameSource, ForReading)
Set objTSDest    = objFSO.OpenTextFile(strFileNameDest, ForWriting, True)

With objTSSource
        Do Until .AtEndOfStream
                objTSDest.WriteLine FromCyrillicToLatin(.ReadLine())
        Loop
       
        .Close
End With

objTSDest.Close

Set objTSDest    = Nothing
Set objTSSource  = Nothing
Set objFSO        = Nothing
Set objDictionary = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function FromCyrillicToLatin(strLine)
        Dim i
       
        Dim strValue
        Dim char
       
        strValue = ""
       
        For i = 1 To Len(strLine)
                char = Mid(strLine, i, 1)
               
                If objDictionary.Exists(char) Then
                        strValue = strValue & objDictionary.Item(char)
                Else
                        strValue = strValue & char
                End If
        Next
       
        FromCyrillicToLatin = strValue
End Function
'=============================================================================


1. Кодировка, судя по контексту ANSI/win-1251.
2. Фильтры будут работать куда быстрее, ежели писать их на C.

sLiDeR-X 23-09-2011 09:49 1758592

Iska, ему транслит надо сделать, а не перевести раскладку.

Trueman777 23-09-2011 10:06 1758604

sLiDeR-X, спасибо. Вроде понятно, нужно подредактировать cmd-файл, переписав пары символов в соответствии с раскладкой клавиатуры, а то там кракозябры какие-то... )) Ну принцип, вроде, ясен. А exe'шик там для чего?

Iska, Я извиняюсь... что мне делать с этим кодом? )

Цитата:

Цитата sLiDeR-X
Iska, ему транслит надо сделать, а не перевести раскладку. »

Не-не-не, именно раскладку, всё правильно. Я же это описал и в заголовке темы, и "йцукен=qwerty", и "Привет=Ghbdtn"... :)

sLiDeR-X 23-09-2011 10:45 1758622

Trueman777, если вам из русского в английский надо, то править ничего не надо.
Экзешник - это программа, посредством которой идет преобразование

Iska 23-09-2011 16:33 1758851

Цитата:

Цитата Trueman777
Iska, Я извиняюсь... что мне делать с этим кодом? ) »

1. Поменять в коде:
Код:

strFileNameSource = "E:\Песочница\0076\Source.txt"
strFileNameDest  = "E:\Песочница\0076\Dest.txt"

на пути к Вашим файлам (я не стал делать обработку аргументов, поскольку речь шла об одном файле).

2. Сохранить текст кода в произвольном файле с расширением «.vbs» с кодировкой ANSI (windows-1251).

3. Запустить сохранённый скрипт на исполнение двойным щелчком.

Trueman777 23-09-2011 22:43 1759105

Большое спасибо, всё получилось.


Время: 19:52.

Время: 19:52.
© OSzone.net 2001-