Difference between revisions of "Talk:Судьба/Ночь схватки:Чистка скриптов"
(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	#импорт необходимого модуля |
||
+ | |||
+ | 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')	#сообщение пользователю, чтобы не заскучал</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)