-->

Программирование на языке Ruby

На нашем литературном портале можно бесплатно читать книгу Программирование на языке Ruby, Фултон Хэл-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Программирование на языке Ruby
Название: Программирование на языке Ruby
Дата добавления: 16 январь 2020
Количество просмотров: 514
Читать онлайн

Программирование на языке Ruby читать книгу онлайн

Программирование на языке Ruby - читать бесплатно онлайн , автор Фултон Хэл
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов. Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии. Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

• 

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

• 

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

В сети есть еще много библиотек, которые могут вам пригодиться. Ищите их на сайтах http://raa-ruby-lang.org и 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)

  elsif FileTest::file?(fullname)

   FileUtils.copy(fullname, newname)

  else

   puts "??? : #{fullname}"

  end

 end

end

# "Главная программа"

if ARGV.size != 2

 puts "Usage: copytree oldname newname"

 exit

end

oldname = ARGV[0]

newname = ARGV[1]

if ! FileTest::directory?(oldname)

 puts "Ошибка: первый параметр должен быть именем существующего каталога."

 exit

end

if FileTest::exist? (newname)

 puts "Ошибка: #{newname} уже существует."

 exit

end

oldname = File.expand_path(oldname)

newname = File.expand_path(newname)

$оldname=oldname

$newname=newname

recurse(oldname, newname)

Возможно, и существуют варианты UNIX, в которых команда

cp -R
сохраняет символические ссылки, но нам о них ничего не известно. Программа, показанная в листинге 14.5, была написана для решения этой практической задачи.

14.8.3. Удаление файлов по времени модификации и другим критериям

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

Ниже представлена небольшая программа, удаляющая файлы, которые в последний раз модифицировались раньше указанного момента (заданного в виде объекта

Time
):

def delete_older(dir, time)

Перейти на страницу:
Комментариев (0)
название