PDA

Показать полную графическую версию : [решено] Подскажите скрипт или утилиту для перевода текста в txt-файле в другую раскладку


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

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

Спасибо.

sLiDeR-X
23-09-2011, 08:48
Держи.

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

Iska
23-09-2011, 08:49
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
Iska, ему транслит надо сделать, а не перевести раскладку.

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

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

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

sLiDeR-X
23-09-2011, 10:45
Trueman777, если вам из русского в английский надо, то править ничего не надо.
Экзешник - это программа, посредством которой идет преобразование

Iska
23-09-2011, 16:33
Iska, Я извиняюсь... что мне делать с этим кодом? ) »
1. Поменять в коде:
strFileNameSource = "E:\Песочница\0076\Source.txt"
strFileNameDest = "E:\Песочница\0076\Dest.txt"
на пути к Вашим файлам (я не стал делать обработку аргументов, поскольку речь шла об одном файле).

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

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

Trueman777
23-09-2011, 22:43
Большое спасибо, всё получилось.




© OSzone.net 2001-2012