Difference between revisions of "Talk:Судьба/Ночь схватки:Чистка скриптов"

From Baka-Tsuki
Jump to navigation Jump to search
(New page: Скрипт на Python, по-моему только word wrap убьет. Ещё нужно убивать всё что в квадратных скобках, а также все с...)
 
(прокомментировал скрипт на Python)
Line 1: Line 1:
  +
==Скрипт на Python==
 
Скрипт на Python, по-моему только word wrap убьет.
 
Скрипт на Python, по-моему только word wrap убьет.
 
Ещё нужно убивать всё что в квадратных скобках, а также все строки, начинающиеся на @ вместе с символом возврата каретки.
 
Ещё нужно убивать всё что в квадратных скобках, а также все строки, начинающиеся на @ вместе с символом возврата каретки.
 
Строки типа *page заменять убивать, н осимвол возврата каретки оставлять.
 
Строки типа *page заменять убивать, н осимвол возврата каретки оставлять.
 
--[[User:Rung|Rung]] 15:46, 11 May 2008 (PDT)
 
--[[User:Rung|Rung]] 15:46, 11 May 2008 (PDT)
  +
----
  +
Скрипт мой, поэтому я отвечаю за свои слова: "сохраняющим '''только отображаемый текст''' из всех *.ks-файлов в каталоге, куда он помещен". Питон отличается высокой читабельностью кода, поэтому я не думал, что скрипт придется комментировать...
  +
<pre>import os&#09;#импорт необходимого модуля
  +
  +
def debrack(line):&#09;#функция, вырезающая фрагменты между квадратными скобками в переданной ей строке
  +
start = line.find('[')
  +
end = line.find(']')
  +
if start == -1: return line
  +
if start < end: return line[:start]+line[end+1:]
  +
return ''
  +
  +
files = []&#09;#инициализация списка для сбора *.ks-файлов
  +
for file in os.listdir(os.getcwd()):&#09;#обход списка всех файлов в каталоге со скриптом
  +
if file.endswith('.ks'): files.append(file)&#09;#...и его фильтрация - выбор только *.ks-файлов
  +
if len(files) == 0:
  +
print 'No *.ks file(-s) to decode in current directory!'&#09;#*.ks-файлы в текущем каталоге не найдены
  +
exit()
  +
for file in files:&#09;#обработка каждого найденного *.ks-файла
  +
print file,
  +
raw = open(file, 'rb')
  +
res = open(file.replace('.ks', '.txt'), 'wb')&#09;#если такой *.txt-файл уже существует, он будет перезаписан!
  +
for line in raw:
  +
if line.find('\x00[\x00w\x00r\x00a\x00p\x00 \x00t\x00e\x00x\x00t\x00=\x00"\x00"\x00]') >= 0:
  +
#отбираются только строки, начинающиеся с [wrap text=""]
  +
templine = debrack(line)&#09;#из строки убирается первый фрагмент в квадратных скобках
  +
for i in range (1,100):&#09;#макс.100 итераций - защита от зацикливания на строке
  +
newline = debrack(templine)&#09;#из строки удаляются следующий фрагмент
  +
if newline == templine:&#09;#если результат такой же, в строке скобок не осталось
  +
res.write(newline.replace('\x00', '')[2:])&#09;#поэтому записываем её в файл
  +
break
  +
else:&#09;#был убран еще один фрагмент, поэтому обрабатываем строку дальше
  +
templine = newline&#09;#постепенно оставляя в ней только текст
  +
raw.close()
  +
res.close()
  +
print '-> '+file.replace('.ks', '.txt')&#09;#сообщение пользователю, чтобы не заскучал</pre>
  +
Скрипт писал исключительно для себя, поэтому рюшек типа обработки ошибок и справки не предусмотрено. Работоспособность проверена неоднократно на разных машинах.
  +
  +
Тем не менее, прошу сообщать сюда, если вдруг возникнут какие-либо проблемы. Например, я не знаю, есть ли в игре фразы в квадратных скобках (по идее, их быть не должно, но я не проверял) - если есть, при обработке они будут вырезаны.
  +
  +
[[User:Const2k|Const2k]] 00:25, 12 May 2008 (PDT)

Revision as of 09:25, 12 May 2008

Скрипт на Python

Скрипт на Python, по-моему только word wrap убьет. Ещё нужно убивать всё что в квадратных скобках, а также все строки, начинающиеся на @ вместе с символом возврата каретки. Строки типа *page заменять убивать, н осимвол возврата каретки оставлять. --Rung 15:46, 11 May 2008 (PDT)


Скрипт мой, поэтому я отвечаю за свои слова: "сохраняющим только отображаемый текст из всех *.ks-файлов в каталоге, куда он помещен". Питон отличается высокой читабельностью кода, поэтому я не думал, что скрипт придется комментировать...

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 = []	#инициализация списка для сбора *.ks-файлов
for file in os.listdir(os.getcwd()):	#обход списка всех файлов в каталоге со скриптом
 if file.endswith('.ks'): files.append(file)	#...и его фильтрация - выбор только *.ks-файлов
if len(files) == 0:
 print 'No *.ks file(-s) to decode in current directory!'	#*.ks-файлы в текущем каталоге не найдены
 exit()
for file in files:	#обработка каждого найденного *.ks-файла
 print file,
 raw = open(file, 'rb')
 res = open(file.replace('.ks', '.txt'), 'wb')	#если такой *.txt-файл уже существует, он будет перезаписан!
 for line in raw:
  if line.find('\x00[\x00w\x00r\x00a\x00p\x00 \x00t\x00e\x00x\x00t\x00=\x00"\x00"\x00]') >= 0:
#отбираются только строки, начинающиеся с [wrap text=""]
   templine = debrack(line)	#из строки убирается первый фрагмент в квадратных скобках
   for i in range (1,100):	#макс.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')	#сообщение пользователю, чтобы не заскучал

Скрипт писал исключительно для себя, поэтому рюшек типа обработки ошибок и справки не предусмотрено. Работоспособность проверена неоднократно на разных машинах.

Тем не менее, прошу сообщать сюда, если вдруг возникнут какие-либо проблемы. Например, я не знаю, есть ли в игре фразы в квадратных скобках (по идее, их быть не должно, но я не проверял) - если есть, при обработке они будут вырезаны.

Const2k 00:25, 12 May 2008 (PDT)