Судьба/Ночь схватки:Чистка скриптов: 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')