Судьба/Ночь схватки:Чистка скриптов: Difference between revisions
m "\[wrap text=*\]" |
rephrased comments and added Python script / перефразировал комментарии, добавил скрипт на Python |
||
Line 1: | Line 1: | ||
при | ==Введение== | ||
Расшифрованные *.ks-файлы содержат, наряду с собственно текстом, служебную информацию (например, для корректной разбивки фразы на слова при переносе). Для того чтобы убрать эту информацию из файла и получить текст в "читабельном" виде, можно воспользоваться следующими вариантами: | |||
*макрос для MS Word 2003 (для обработки текста в отдельном документе Word) | |||
*скрипт на Python (для обработки всех *.ks-файлов в отдельном каталоге) | |||
==Макрос для MS Word 2003== | |||
Для использования макроса необходимо вставить его в документ, сохранить изменения и запустить его на выполнение. Чтобы вставить макрос, нажмите '''Alt+F11''', вставьте код ('''Ctrl+C, Ctrl+V''') и сохраните документ ('''Ctrl+S'''). Для запуска воспользуйтесь меню '''Сервис - Макрос'''. | |||
После работы макроса, возможно, в документе останутся некоторые нежелательные фрагменты, но значительных неудобств при работе они не доставлять не будут. Пожелания и предложения принимаются [[Talk:Судьба/Ночь схватки:Чистка скриптов|на соответствующей странице обсуждения]]. | |||
<pre>Sub FSN_CleanUp() | <pre>Sub FSN_CleanUp() | ||
' | ' | ||
Line 190: | Line 199: | ||
End Sub | End Sub | ||
</pre> | </pre> | ||
==Скрипт на Python== | |||
Также можно воспользоваться скриптом, сохраняющим только отображаемый текст из всех *.ks-файлов в каталоге, куда он помещен. Полученный текст сохраняется в соответствующие *.txt-файлы в том же каталоге. Сохраните нижеприведенный код в текстовый файл (*.txt), переименуйте его в *.py и поместите в каталог с файлами, подлежащими обработке. Если у вас установлен Python, *.py-файлы можно запускать так же, как и другие программы. | |||
Python входит в стандартную конфигурацию многих ОС (например, Mac OS X, различные версии Linux и *BSD), '''кроме ОС от Microsoft'''. | |||
'''Для использования Python под Windows скачайте и установите дистрибутив Python 2.x с [http://www.python.org/ официального сайта].''' | |||
Если в Windows для программ, не поддерживающих Unicode, не установлена кодировка Shift-JIS, скрипт с именами файлов на японском работать не будет. Поэтому *.ks-файлы нужно переименовать, исключив из названий все не-ASCII символы (должна остаться только латиница и/или цифры), иначе потребуется запускать скрипт через Microsoft Applocale. В последнем случае откройте консоль с помощью Applocale (укажите в Applocale для запуска файл '''%windir%\system32\cmd.exe''' - если используется Windows XP), перейдите в консоли в каталог с файлами, подлежащими обработке (например, с помощью команды '''cd C:\FSN'''), и запустите заранее созданный и помещенный туда же *.py-файл (например, командой '''gettext.py'''), содержащий следующий текст: | |||
<pre>import os | |||
def debrack(line): | |||
start = line.find('[') | |||
end = line.find(']') | |||
if start == -1: return line | |||
if start < end: return line[:start]+line[end+1:] | |||
return '' | |||
files = [] | |||
for file in os.listdir(os.getcwd()): | |||
if file.endswith('.ks'): files.append(file) | |||
if len(files) == 0: | |||
print 'No *.ks file(-s) to decode in current directory!' | |||
exit() | |||
for file in files: | |||
print file, | |||
raw = open(file, 'rb') | |||
res = open(file.replace('.ks', '.txt'), 'wb') | |||
for line in raw: | |||
if line.find('\x00[\x00w\x00r\x00a\x00p\x00 \x00t\x00e\x00x\x00t\x00=\x00"\x00"\x00]') >= 0: | |||
templine = debrack(line) | |||
for i in range (1,100): | |||
newline = debrack(templine) | |||
if newline == templine: | |||
res.write(newline.replace('\x00', '')[2:]) | |||
break | |||
else: | |||
templine = newline | |||
raw.close() | |||
res.close() | |||
print '-> '+file.replace('.ks', '.txt')</pre> |
Revision as of 21:55, 11 May 2008
Введение
Расшифрованные *.ks-файлы содержат, наряду с собственно текстом, служебную информацию (например, для корректной разбивки фразы на слова при переносе). Для того чтобы убрать эту информацию из файла и получить текст в "читабельном" виде, можно воспользоваться следующими вариантами:
- макрос для MS Word 2003 (для обработки текста в отдельном документе Word)
- скрипт на Python (для обработки всех *.ks-файлов в отдельном каталоге)
Макрос для MS Word 2003
Для использования макроса необходимо вставить его в документ, сохранить изменения и запустить его на выполнение. Чтобы вставить макрос, нажмите Alt+F11, вставьте код (Ctrl+C, Ctrl+V) и сохраните документ (Ctrl+S). Для запуска воспользуйтесь меню Сервис - Макрос.
После работы макроса, возможно, в документе останутся некоторые нежелательные фрагменты, но значительных неудобств при работе они не доставлять не будут. Пожелания и предложения принимаются на соответствующей странице обсуждения.
Sub FSN_CleanUp() ' ' macro for MS Word 2003 ' created at 11.05.2008 by DMC ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "\*page0*texton" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "\[wrap text=*\]" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "\[line*\]" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[l][r]" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "\*page*|" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "@pgnl" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "\@textoff*texton^13" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "@pg" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "\@textoff*return^13" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "\@*^13" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = """""" .Replacement.Text = ""..."" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False Selection.Find.Execute Replace:=wdReplaceAll End Sub
Скрипт на Python
Также можно воспользоваться скриптом, сохраняющим только отображаемый текст из всех *.ks-файлов в каталоге, куда он помещен. Полученный текст сохраняется в соответствующие *.txt-файлы в том же каталоге. Сохраните нижеприведенный код в текстовый файл (*.txt), переименуйте его в *.py и поместите в каталог с файлами, подлежащими обработке. Если у вас установлен Python, *.py-файлы можно запускать так же, как и другие программы.
Python входит в стандартную конфигурацию многих ОС (например, Mac OS X, различные версии Linux и *BSD), кроме ОС от Microsoft.
Для использования Python под Windows скачайте и установите дистрибутив Python 2.x с официального сайта.
Если в Windows для программ, не поддерживающих Unicode, не установлена кодировка Shift-JIS, скрипт с именами файлов на японском работать не будет. Поэтому *.ks-файлы нужно переименовать, исключив из названий все не-ASCII символы (должна остаться только латиница и/или цифры), иначе потребуется запускать скрипт через Microsoft Applocale. В последнем случае откройте консоль с помощью Applocale (укажите в Applocale для запуска файл %windir%\system32\cmd.exe - если используется Windows XP), перейдите в консоли в каталог с файлами, подлежащими обработке (например, с помощью команды cd C:\FSN), и запустите заранее созданный и помещенный туда же *.py-файл (например, командой gettext.py), содержащий следующий текст:
import os def debrack(line): start = line.find('[') end = line.find(']') if start == -1: return line if start < end: return line[:start]+line[end+1:] return '' files = [] for file in os.listdir(os.getcwd()): if file.endswith('.ks'): files.append(file) if len(files) == 0: print 'No *.ks file(-s) to decode in current directory!' exit() for file in files: print file, raw = open(file, 'rb') res = open(file.replace('.ks', '.txt'), 'wb') for line in raw: if line.find('\x00[\x00w\x00r\x00a\x00p\x00 \x00t\x00e\x00x\x00t\x00=\x00"\x00"\x00]') >= 0: templine = debrack(line) for i in range (1,100): newline = debrack(templine) if newline == templine: res.write(newline.replace('\x00', '')[2:]) break else: templine = newline raw.close() res.close() print '-> '+file.replace('.ks', '.txt')