Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с ftp 
V
    Опции темы
Akeem
Дата 16.7.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Вот такая задача: 
Нужно получить с фтп листинг фалов определённого вида( например: MOD17A2.A2006041.h33v10.004.2006065184018.hdf). Мне это не понятно как зделать. составить рег выражение такого вида могу, но  это только для стрингов будет работать.

Также: Как зделать чтобы переходить из папки в папку. Папки находятся в виде даты (например: 2000.06.19)? 
 плиз помогите.  


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Rubynovich
Дата 17.7.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 7.6.2006

Репутация: 3
Всего: 3



Начнем с простого... для того, чтобы получить файл (с заранее известным адресом) можно использовать тот же open-uri.

Код

require 'open-uri'
url = 'ftp://localhost/test.txt'

open(url).read.display( File.open(File.basename(url),'w+') )


Но это только на чтение и для заранее определенных имен файлов. Поэтому нужно работать со специализированной библиотекой net/ftp.

Код

require 'net/ftp'
require 'pp'

Net::FTP.open('localhost'){ |ftp|
   ftp.login
   files = ftp.list('*').find_all{ |str| str[/^-/] }.map{ |str| str.split(/\s+/).last }
   pp files
   dirs = ftp.list('*').find_all{ |str| str[/^d/] }.map{ |str| str.split(/\s+/).last }
   pp dirs
}


Можно переходить в директории методом .chdir, но лучше использовать .list с указанием директории.

Код

    ftp.list('2000.12.12/*')


Стандартных регулярок здесь нет, но в примере я использовал несколько... для распознавания файл/директория и разбиения. Ты тоже можешь так делать. Регулярное выражение для твоих директорий будет выглядеть примерно так:
Код

   dirs = ftp.list('*').find_all{ |str| 
       [/\d{4}\.\d{2}\.\d{2}$/,/^d/].all?{ |rule| str[rule] } 
   }.map{ |str| str.split(/\s+/).last }
   pp dirs


С файлами проще... сворее всего их можно отсекать по расширению:
Код

   files = ftp.list('2000.12.12/*.hdf').find_all{ |str| str[/^-/] }.map{ |str| str.split(/\s+/).last }
   pp files


Метод pp я использовал для отладки. Можешь выкинуть все pp и reqiure 'pp' после того, как все заработает. 
PM MAIL   Вверх
Akeem
Дата 24.7.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Спасибо. вопрос решен. Правда не так как рекомендовал Rubynovich, но немного ефктивнее дя программы. 


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Rubynovich
Дата 24.7.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 7.6.2006

Репутация: 3
Всего: 3



Цитата(Akeem @ 24.7.2006,  17:39)
Спасибо. вопрос решен. Правда не так как рекомендовал Rubynovich, но немного ефктивнее дя программы.

Ну уж расскажи как решал... =) Для справки =) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.