Меню сайта |
|
|
|
Категории раздела |
|
Программирование
[0]
Статьи по алгоритмизации, программированию, языкам программирования
|
Системы разработки
[2]
Статьи, посвященные различным средствам разработки.
|
Обработка текстов
[3]
Статьи, посвященные различным текстовым редакторам и приемам обработки текстов
|
Обработка графики
[1]
Статьи, посвященные обработке изображений в различных графических редакторах
|
|
|
Статистика |
|
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
Автоматизация разметки.
#!/usr/bin/env ruby
#coding:utf-8
(ARGV!=[])? fnames=ARGV : fnames=$<.readlines.map{|line| line.chomp!.split}.flatten
tag="do begin end rescue break while"
tab=" "
fnames.each do |fname|
begin
myf = IO.read(fname)
rescue
puts "Плохие файлы или их нет!!!"
break
end
res=myf.split("\n").map do |s|
s.gsub!("<","<")
s.gsub!(">",">")
tag.split.each { |t|
s.gsub!(t,"<b>"+t+"</b>")
}
i=0
b=""
while(s[0]=="\t")
s[0]=""
b+=tab
end
s=b+s
s+="<br>"
end.join("\n")
File.open("html"+fname,"w").puts res
end
Для начала нужно получить имена файлов. Для этого используется список fnames. Именно список, потому что термин массив - на мой взгляд - неудачен, а список - интуитивно понятно что это пронумерованная последовательность данных.
Итак, имена файлов могут попасть или в список ARGV, если они переданы в командной строке. В противном случае они попадают в поток ввода, который обозначается $< в виде списка строк, который читается readlines. После этого обрабатывается каждая строка списка - итератор map.
Итератор одна из интересных особенностей языка Ruby. Он пробегает все значения пречислимого типа, и на каждый шаг выполняет определенное программистом действие. Например, map в данном случае пробегает все строки и для каждой выполняет два действия: удаляет завершающие символы перевода строки и возврата каретки - chomp! и делит строку на список строк относительно пробела - split. В результате всего этого конвейера получается список строк и других списков. И, наконец, flatten - объединяет все строки в один список.
Переменная tag содержит нужные служебные слова, а переменная tab - размер отступа (4 пробела).
Запускается итератор each для списка файлов. Каждое имя предварительно помещается в переменную fname. Затем IO.read(fname) пытается читать все из файла. В случае исключительной ситуации: нет файла или он плох - выполняется код после rescue. Кстати, между begin и end можно поместить любой подозрительный код и с честью выйти в случае возникновения исключения.
Если все в порядке то читается файл, делится на список строк и запускается известный итератор map. На каждом шаге обрабатывается конкретная строка:
1. символы < и > заменяются на < и > так принято в html.
2. интересно работает итератор:
tag.split.each { |t|
s.gsub!(t,"<b>"+t+"</b>")
}
пробегает все термины и если встречается очередной термин в подстроке он заключается в тег <b> - жирный шрифт.
3. символы табуляции заменяются значением переменной tab.
После обработки списка строк он объединяется в одну строку и, в конце концов, записывается в файл.
Пока все. Код можно улучшить. Любые дельные предложения приветствуются.
|
Категория: Обработка текстов | Добавил: jhtulen (24.03.2015)
|
Просмотров: 177
| Рейтинг: 0.0/0 |
|
|
Вход на сайт |
|
|
|
Поиск |
|
|
|
|