Создание электронных книг в формате FictionBook 2.1: практическое руководство. Версия 1.0 PreRelease от 17.09.2009 г (Кондратович) - страница 42

#

# запускать из директории, где находится входной файл

# запуск: ruby dtxt_fb2.rb

#

# массив для перекодировки текста. Псевдографика заменяется на код 135,

# символы, отсутствующие  в кодировке win-1251 - на код 138

doswin = [192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,

    208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,

    224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,

    168, 184, 170, 186, 175, 191, 161, 162, 176, 149, 183, 138, 185, 164, 138, 138]

# считываем входной файл в одну строку

wtext=ARGF.readlines.to_s

ARGF.close

wtext.gsub!(/\n(\S)/,' \1') # склеиваем строки абзацев

wtext.squeeze!(" ")         # убираем лишние пробелы

wtext.gsub!(/^ /,"")        # убираем пробелы в начале строки

# перекодировка текста

for i in 0..(wtext.length-1)

  case wtext[i]

    when 20: wtext[i] = 182 # обработать символ "Пи"

    when 21: wtext[i] = 167 # обработать символ "параграф"

    when 128..255: wtext[i] = doswin[wtext[i]-128] # обработать все остальное

  end

end

wtext.gsub!("...", (133).chr) # многоточие - в символ "многоточие"

wtext.gsub!(/(\s)-\s/,'\1'+(151).chr+" ") # компьютерное тире - в типографское

# порубим строку в массив

wtext = wtext.split(/\n/)

wtext.collect! do |line|

  if line =="" then

    line = "" # пустая строка?

  else

    line="

"+line+"

" # нет, не пустая

  end

end

# добавляем заголовок

wtext.insert(0,"

nonfiction

ru

Yuzich Ruby script (dostxt -> FB2)

")

# добавляем хвост

wtext << "

\n\n\n"

# сохраняем выходной файл

wfile = File.new(ARGF.filename.dup.gsub!(/\.txt/i,".fb2"),"w")

wfile.puts wtext

wfile.close

После того, как скрипт отработает, в директории появится файл <имя_исходного_файла>.fb2. Небольшая правка в FB Editor и он будет полностью готов к распространению.

Пример второй.
Конвертирование журналов c WiseSoft.ru