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

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

Жанры

Программирование на языке 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)

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

Битва за Изнанку

Билик Дмитрий Александрович
7. Бедовый
Фантастика:
городское фэнтези
мистика
5.00
рейтинг книги
Битва за Изнанку

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Вперед в прошлое 4

Ратманов Денис
4. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое 4

Идеальный мир для Демонолога

Сапфир Олег
1. Демонолог
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Демонолога

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Практик

Листратов Валерий
5. Ушедший Род
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Практик

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Хозяин оков II

Матисов Павел
2. Хозяин Оков
Фантастика:
юмористическое фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Хозяин оков II

Развод. Без права на ошибку

Ярина Диана
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Развод. Без права на ошибку

Ярар X. Война. Том II

Грехов Тимофей
10. Ярар
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ярар X. Война. Том II

"Фантастика 2025-30". Компиляция. Книги 1-31

Шмаков Алексей Семенович
Фантастика:
боевая фантастика
фэнтези
5.00
рейтинг книги
Фантастика 2025-30. Компиляция. Книги 1-31

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение