Booki v1.8.4

Программа предназначена для обработки файлов с книгами.  Не требует инсталяции, после первого запуска может вызываться из проводника через контекстное меню обрабатываемых типов файлов. Позволяет обрабатывать текстовые, fb2 и rtf файлы (в том числе в zip архивах). Выполняет операции как с отдельным файлом, так и сразу со всеми файлами в текущем каталоге. Может запускаться в режиме, когда операции c файлами выполняются без вывода окна программы на экран. Выполняемые операции и обрабатываемые файлы задаются через параметры командной строки.

Программа позволяет:
1. Переименовывать файлы с книгами. Программа определяет автора, название и серию книги из файла, формирует новое имя файла и переименовывает файл. Файл можно переименовать нажав кнопку "Переименовать", F2 или Enter, если курсор находиться в поле имени файла. Имя файла формируется скриптом, который задается в настройках программы. Синтаксис и функции скрипта описаны далее.
Назначение операции: cкачивая из интернета книги обычно получаешь файлы с малопонятным названием. Непонятно какая книга в файле, пока не откроешь файл и не посмотришь его содержимое. Чтобы навести порядок со скаченными книгами, можно переименовать файлы по автору и названию книги. После этого можно искать книги просто запустив поиск по имени файла.

2. Перемещать (сортировать) файлы по каталогам. Программа определяет автора, название и серию книги из файла, формирует имя каталога, если необходимо создает его, и перемещает файл в этот каталог. Файл можно переместить нажав кнопку "Переместить" или F6. Имя каталога формируется скриптом, который задается в настройках программы. Синтаксис и функции скрипта описаны далее.
Назначение операции: можно хранить свою электронную библиотеку переименовав файлы и рассортировав их по каталогам. В таком варианте нет необходимости использовать специальную программу-библиотекарь.

3. Архивировать файлы в архив zip формата.

4. Перекодировать fb2 файлы из кодировки UTF-8 в WIN1251, что уменьшает размер файла примерно на 40% (в zip архиве на 10-15%). Перекодировать файл можно нажав кнопку "UTF8->WIN". Если в файле встретится символ, который отсутствует в кодировке WIN1251, то программа не перекодирует файл.
Назначение операции: большинство книг не содержат никаких экзотических символов и прекрасно могут храниться в кодировке WIN1251, что дает уменьшение размера файла.

5. Переконвертировать файл из fb2 в txt. В настройках программы задается формат создаваемого текстового файла. Переконвертировать файл можно нажав кнопку "FB2->TXT".
Назначение операции: после переконвертирования текстовый файл можно открыть в Word-е и распечатать книгу на принтере и т.д.

6. Перекодировать текстовые файлы из кодировки DOS CP866 в WIN1251. Перекодировать файл можно нажав кнопку "DOS->WIN".

Параметры командной строки:
booki.exe -операция[операция...] файл [файл...]

Операция:
r - переименовать
m - переместить
z - архивировать
u - перекодировать fb2 файл из UTF8 в WIN1251
t - переконвертировать fb2 файл в текстовый файл
d - перекодировать текстовый файл из DOS CP866 в WIN1251

В имени файла можно указывать символы-шаблоны '*' и '?'.

Пример: booki.exe -ru br12.fb2 c:\books\*.zip
Переименовать и перекодировать из UTF8 в WIN1251 файл br12.fb2 в текущем каталоге, переименовать все поддерживаемые типы файлов в zip архивах в каталоге c:\books, перекодировать из UTF8 в WIN1251 все fb2 файлы в zip архивах в каталоге c:\books.

Синтаксис скрипта для определения имени файла и имени каталога:
Идентификатор переменной начинается с символа '$', может содержать символы 'A'..'Z', 'a'..'z', '_', '0'..'9'. Переменные бывают 2-х типов: строковые, числовые целые со знаком. Переменные не объявляются. Тип переменной определяется при первом присваивании её значения - строкового или числового. После того как тип переменной определен, ей нельзя присваивать значение другого типа.

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

На вход скрипта подаются переменные:
$title - название книги (текстовая)
$authorno - кол-во авторов (числовая)
$seq - серия книги (текстовая)
$seqnum - номер в серии (текстовая)
$genreno - кол-во жанров (числовая)
$srcdir - каталог исходного файла (без "\" на конце)
$srcfile - имя исходного файла
$srcfileext - расширение исходного файла (начинается с ".", например ".txt")
$bookfile - имя файла с книгой (если исх. файл не заархивирован, то $bookfile = $srcfile, иначе $bookfile - имя файла в архиве, а $srcfile - имя архивного файла)
$bookfileext - расширение файла с книгой

Скрипт для определения имени файла должен сформировать имя файла без расширения в переменной $filename. Скрипт для определения каталога должен сформировать имя каталога в переменной $dir.

В строке допускается только один оператор. Строка начинающаяся с // является комментарием. 

Оператор присваивания:
$переменная = операнд
или
$переменная = операнд1 +|- операнд2
или
$переменная = функция(операнд1, ...)
Операнд может быть переменной, строковой и числовой константой. Типы операндов должны совпадать. Для строковых операндов допускается только оператор +.

Функции доступные в скрипте:
author(i, p) - возвращает фамилию, имя или отчество i-го автора. i должна быть от 1 до $authorno. Если p = 'l', функция возвращает фамилию, 'f' - имя, 'm' - отчество.
genre(i) - возвращает i-тый жанр книги. i должна быть от 1 до $genreno.
len(str) - возвращает кол-во символов в строке
left(str, n) - возвращает первые n символов строки str
mid(str, p, n) - возвращает n символов строки str начиная с позиции p. Первый символ с строке имеет позицию 1.
rtrim(str) - удаляет пробелы в конце строки
ltrim(str) - удаляет пробелы в начале строки
trim(str) - удаляет пробелы в начале и конце строки
repl(str, src, des) - заменяет в строке str все вхождения подстроки src на строку des                               
upper(str) - переводит строку в верхний регистр
lower(str) - переводит в строку в нижний регистр
cstr(int) - возвращает строковое представление числа 

Условный оператор:
if (условие) оператор присваивания
или
if (условие) {
   ...
}

Оператор цикла:
while (условие) {
   ...
}

Условие в операторах if и while:
операнд1 =|<>|>|<|>=|<= операнд2
Операнд может быть переменной, строковой и числовой константой. Типы операндов должны совпадать. Для строковых операндов допускается только операторы сравнения = и <>.

Некоторые аспекты работы программы:
- программа позволяет обрабатывать файлы в zip архивах только если в архиве один файл и файл сжат методом deflate
- для текстовых файлов не существует формата по которому указывается автор и название книги. Обычно в первой строке файла автор, во второй название книги или наоборот. Программа подсчитывает кол-во попаданий слов из первых 2-х строк в список фамилий и имен авторов, который имеется в программе. В той строке, для которой кол-во попаданий больше, находиться автор книги, в другой - название.
- в кодировке WIN1251 символы представляется всегда одним байтом, в кодировке UTF-8 символы представляется от 1 до 4-х байт. Символы кирилицы в UTF-8 занимают 2 байта. Теоретически при перекодировании из UTF-8 в WIN1251 размер файла должен уменьшиться в 2 раза (на 50%), но из-за того что в файле содержатся управляющие теги латинскими букавами, которые занимают 1 байт, плюс картинка обложки книги, и в результате файл уменьшается только на 40%. Цифры 40% и 10-15% для сжатых файлов получены экспериментальным путем.

Программа НЕЗАРЕГИСТРИРОВАНА. Через каждые несколько десятков операций будет выдаваться сообщение с предложением зарегистрировать программу. Зарегистрировав программу, Вы избавитесь от сообщения и поддержите дальнейшую разработку программы. 

Условия регистрации:
- программа используется как есть без каких либо гарантий со стороны разработчика
- регистрация распостраняется на все последующие версии программы
- запрещается передавать кому-либо свой регистрационный файл, в противном случае в следующих версиях Ваша регистрация может быть отменена

Для регистрации программы необходимо:
- перечислить 150руб. на WMR412932749082 или на яндекс.деньги 41001147154711, или 6$ на WMZ353488101382
- послать на booki@hotbox.ru письмо с номером счета системы WebMoney или яндекс.деньги с которого перечислили деньги
- в ответ придет файл bookireg.dat, который необходимо переписать в каталог, где находиться booki.exe

Написать разработчику booki@hotbox.ru