Показать полную графическую версию : [решено] Подскажите скрипт или утилиту для перевода текста в txt-файле в другую раскладку
Trueman777
23-09-2011, 07:44
Поясняю: например, у меня есть txt-файл с текстом Привет, мне нужен батник или самостоятельная программа, которая создаст мне текстовый файл с содержимым Ghbdtn.
Как я понимаю, нужно просто установить соответствие символов типа "йцукенгшщзхъ..." = "qwertyuiop[]..." и "ЙЦУКЕНГШЩЗХЪ..." = "QWERTYUIOP{}..." и выполнить замену текста.
На крайняк, конечно, можно было бы вручную заменять по одному символу через одноименную функцию в Блокноте, но это, во-первых, сам по себе процесс будет гемморный, а во-вторых, у меня больше 3 млн слов в файле. Блокнот, боюсь, не осилит замену в таком огромном объеме текста. Я состарюсь раньше, чем успею закончить посимвольную замену =(
Спасибо.
sLiDeR-X
23-09-2011, 08:48
Держи.
Поправить транслит на свое усмотрение думаю сможешь
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, Я извиняюсь... что мне делать с этим кодом? ) »
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.