Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

• библиотеки для работы с базами данных RubyDBI и DBD/ODBC;

• прочие библиотеки и инструменты, в том числе

log4r
,
zlib
,
OpenSSL
,
Iconv
,
readline
и другие.

Планируются, но еще не готовы варианты этого инсталлятора и для других платформ.

14.7. Библиотеки, о которых полезно знать

Если вы программируете на Ruby в Windows, вам абсолютно необходим пакет, созданный Дэниэлем Бергером (Daniel Berger), одним из самых известных специалистов по Ruby

на этой платформе. Библиотека
win32-utils
— в действительности целый набор мелких библиотек. Мы не можем рассмотреть их все подробно, но хотя бы перечислим.

• 

win32-changenotify
— для мониторинга событий файловой системы;

• 

win32-clipboard
— для взаимодействия с буфером обмена Windows;

• 

win32-etc
— предоставляет аналоги таких UNIX-функций, как
getpwnam
и
getpwuid
;

• 

win32-event
— интерфейс с событиями Windows (объектами Event);

• 

win32-eventlog
— интерфейс с журналом событий;

• 

win32-ipc
— базовый класс для всех объектов синхронизации в Windows (используется в библиотеке
win32-event
и др.);

• 

win32-mmap
— интерфейс к файлам, проецируемым на память, в Windows;

• 

win32-open3
— библиотека
open3
для Windows (запустить команды и получить три описателя файлов);

• 

win32-pipe
— именованные каналы в Windows;

• 

win32-process
— реализация для Windows методов
fork
,
wait
и
kill
, имеющихся в UNIX;

• 

win32-sapi
— интерфейс к Microsoft Speech API;

• 

win32-service
— интерфейс к службам Windows;

• 

win32-shortcut
— интерфейс для создания и модификации ярлыков в Windows;

• 

win32-sound
— интерфейс для воспроизведения звуковых файлов в Windows;

Вот еще несколько библиотек, которые полезно иметь под рукой:

• 

Win32::Console
— это перенос пакетов Win32::Console и Win32::Console::ANSI, первоначально написанных на языке Perl. Эта библиотека значительно упрощает работу с консолью в Windows (изменение цветов, позиционирование курсора, запрос информации и эмуляцию управляющих символов ANSI);

• 

ActiveDirectory
позволяет легко взаимодействовать с экземплярами Active Directory, работающими на серверах под управлением Microsoft Windows;

• 

ruby-inifile
позволяет работать с ini-файлами (читать, разбирать и обновлять их).

В сети есть еще много библиотек, которые могут вам пригодиться. Ищите их на сайтахи http://rubyforge.org.

14.8. Работа с файлами, каталогами и деревьями

При выполнении рутинных задач приходится много работать с файлами и каталогами, в том числе с целыми иерархиями каталогов. Немало материала на эту тему вошло в главу 4, но кое-какие важные моменты мы хотим осветить здесь.

Поскольку ввод/вывод — вещь системно-зависимая, то для различных систем приходится применять разные приемы. Если сомневаетесь, экспериментируйте!..

14.8.1.

Несколько слов о текстовых фильтрах

Многие инструменты, которыми мы постоянно пользуемся (как поставляемые производителем, так и разрабатываемые собственными силами), — просто текстовые фильтры. Иными словами, они принимают на входе текст, каким-то образом преобразуют его и выводят. Классическими примерами текстовых фильтров в UNIX служат, в частности, программы

sed
и
tr
.

Иногда файл настолько мал, что целиком помещается в памяти. В этом случае возможны такие виды обработки, которые по-другому было бы сложно реализовать.

file = File.open(filename)

lines = file.readlines

# Какие-то операции...

lines.each { |x| puts x }

Бывает, что нужно обрабатывать файл построчно.

IO.foreach(filename) do |line|

 # Какие-то операции...

 puts line

end

Наконец, не забывайте, что все имена файлов, указанные в командной строке, автоматически собираются в объект

ARGF
, представляющий конкатенацию всех выходных данных (см. раздел 14.2.2). Мы можем вызывать, к примеру, метод
ARGF.readlines
, как если бы
ARGF
был объектом класса
IO
. Вся выходная информация будет, как обычно, направлена на стандартный вывод.

14.8.2. Копирование дерева каталогов (с символическими ссылками)

Пусть нужно скопировать целое дерево каталогов в новое место. Сделать это можно по-разному, но если в дереве есть символические ссылки, задача усложняется.

В листинге 14.5 приведено рекурсивное решение. Оно достаточно дружелюбно — контролирует входные данные и выводит информацию о порядке запуска.

Листинг 14.5. Копирование дерева каталогов

require "fileutils"

def recurse(src, dst)

 Dir.mkdir(dst)

 Dir.foreach(src) do |e|

# Пропустить . и ..

next if [".",".."].include? e

fullname = src + "/" + e

newname = fullname.sub(Regexp.new(Regexp.escape(src)),dst)

if FileTest:rdirectory?(fullname)

recurse(fullname,newname)

elsif FileTest::symlink?(fullname)

linkname = 'ls -l #{fullname}'.sub(/.* -> /,"").chomp

newlink = linkname.dup

n = newlink.index($oldname)

next if n == nil

n2 = n + $oldname.length - 1

newlink[n..n2] = $newname

newlink.sub!(/\/\//,"/")

# newlink = linkname.sub(Regexp.new(Regexp.escape(src)),dst)

File.symlink(newlink, newname)

Поделиться:
Популярные книги

Статьи разных лет

Вацуро Вадим Эразмович
3. Вацуро В.Э. Избранные труды
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Статьи разных лет

Тайна Тёмного Оплота

Куно Ольга
Фантастика:
фэнтези
8.45
рейтинг книги
Тайна Тёмного Оплота

Меняя маски

Метельский Николай Александрович
1. Унесенный ветром
Фантастика:
боевая фантастика
попаданцы
9.22
рейтинг книги
Меняя маски

Газлайтер. Том 17

Володин Григорий Григорьевич
17. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 17

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XVIII

Тайна замка Вержи

Михалкова Елена Ивановна
Детективы:
исторические детективы
9.15
рейтинг книги
Тайна замка Вержи

Игра киллера

Бонансинга Джей
Детективы:
боевики
6.25
рейтинг книги
Игра киллера

Последний Исход

Петрук Вера
4. Сага о халруджи
Фантастика:
фэнтези
боевая фантастика
5.40
рейтинг книги
Последний Исход

Тень в зеркале

Ирвин Ян
1. Сказания трех миров
Фантастика:
фэнтези
7.38
рейтинг книги
Тень в зеркале

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Посмертное проклятие

Хусейн Саддам
Проза:
современная проза
5.00
рейтинг книги
Посмертное проклятие

Врата Мертвого Дома

Эриксон Стивен
Малазанская империя
Фантастика:
эпическая фантастика
6.14
рейтинг книги
Врата Мертвого Дома

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.40
рейтинг книги
Дважды одаренный. Том II

Годы странствий

Чулков Георгий Иванович
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Годы странствий