[Ruby] - Задай вопрос, получи ответ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Sharky, 24 Aug 2009.

  1. -=SmallPox=-

    -=SmallPox=- New Member

    Joined:
    15 Sep 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    подскажите как обрабатывать данные выводимые в консоль?
    например я пингую и мне надо дальше обработать эти данные
     
  2. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    394
    Likes Received:
    118
    Reputations:
    23
    Code:
    cmd="ping 8.8.8.8 -c 4"
    pipe = IO.popen(cmd)
    puts "REVERSE OUTPUT"
    pipe.readlines.each {|line| puts line.reverse}
    
    каналы точно работают только в *nix, как с виндой не знаю
     
  3. -=SmallPox=-

    -=SmallPox=- New Member

    Joined:
    15 Sep 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    луксмус!?
    a = system('ping -i2 10.0.100.101')
    pipe = IO.popen(a)
    puts "REVERSE OUTPUT"
    pipe.readlines.each {|line| puts line.reverse}

    что не так?? -- > in `popen': can't convert true into String (TypeError)...
    сам понял надо IO.popen(ping -i2 10.0.100.101) и все работает...
    а с реверсом ты прикалолся, молодца))
     
    #163 -=SmallPox=-, 20 Dec 2011
    Last edited: 20 Dec 2011
  4. -=SmallPox=-

    -=SmallPox=- New Member

    Joined:
    15 Sep 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Подскажите кто силен: пришол к таму коду
    Code:
     pipe = IO.popen('ping -c5  ya.ru')
    mdev=pipe.readlines 
    str=mdev[9] 
    r = /rtt .*\/([0-9\.]{1,}) ms / 
    t = r .match str
     puts t 
    (тут регулярка отсеивает все кроме значения mdev команды ping)

    регулярка отказывается работать, хотя если на прямую присвоить значение , то все норм. проверял через irb
     
  5. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    394
    Likes Received:
    118
    Reputations:
    23
    я щас пьян, поэтому возможно скажу чушь, но регулярку в таком виде нужно компилировать, помойму это Regex.compile(/rtt .*\/([0-9\.]{1,}) ms / )
    Но лучше не слушай меня, а прочитай Фултона.
    и что такое mdev[9] ? хэш, массив, строка. какая версия 1.8.x или 1.9.x они принципиально отличаються в этом плане
     
  6. -=SmallPox=-

    -=SmallPox=- New Member

    Joined:
    15 Sep 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Лукмус в регулярке закрался подлый пробел в конце)))
    а mdev[9] это 9 строка из пайпа )) к которой и применяю регулярное

    PS с наступающим всех рубистов с рельсовиками!!
     
  7. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    использую редактор SCITE


    Code:
    name = gets.chomp
    puts name
    вот код
    ведь он должен запуститься что собственно говоря он и делает должно появиться окно консоли в котором нужно вбить данные в переменную name, но оно появляться но ввести туда ничего не получается
     
  8. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    394
    Likes Received:
    118
    Reputations:
    23
    windows?
    на линуксе все прекрасно работает, но так даже лучше:
    Code:
    puts 'Input name:' 
    name = gets.chomp 
    puts name
     
  9. Foxlerr

    Foxlerr New Member

    Joined:
    4 Oct 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Приветствую! Хочется писать проект на Рельсах, кто может посоветовать хороший и недорогой хостинг с поддержкой Ruby on Rails?
     
  10. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    394
    Likes Received:
    118
    Reputations:
    23
    либо хероку+амазон, либо свой собственный VDS
     
  11. DarkMist

    DarkMist Elder - Старейшина

    Joined:
    20 Feb 2007
    Messages:
    201
    Likes Received:
    24
    Reputations:
    0
    руби-парсер

    нашел сырой скрипт, более мение работающий....
    но надо бы его заставить в файл вывести.
    Подскажите в каком месте попроще....
    Code:
    require 'mechanize'
     
    class GoogleSearch
      def initialize
        @agent = Mechanize.new
        uagents = []
        @sourceid = ["chrome","opera","navclient-ff","navclient"]
        Mechanize::AGENT_ALIASES.each_pair { |name, val| uagents << name }
        @agent.user_agent_alias = uagents[rand(uagents.size-1)]
      end
      def parse(q, n = 0, sid = 3)
        count, sites = 0, []
        shash, sitesurl = {}, []
        page = @agent.get("http://www.google.ru/search?start=#{count*10}&rls=ru&q=#{q}&sourceid=#{@sourceid[sid]}&ie=utf-8&oe=utf-8&channel=suggest")
        count = page.search('//a[@class="fl"]')[-1].inner_text.to_i
        while true
          if count > n and n != 0
            count = n
            break
          end
          sleep(rand(10))
          page = @agent.get("http://www.google.com/search?start=#{count*10}&rls=ru&q=#{q}&sourceid=#{@sourceid[sid]}&ie=utf-8&oe=utf-8&channel=suggest")
          break if page.search('//a[@class="fl"]')[-1].inner_text.to_i <= count
          puts count = page.search('//a[@class="fl"]')[-1].inner_text.to_i
        end
        puts "All #{count}"
        (0..count).each{|i|
          sleep(rand(3))
          page = @agent.get("http://www.google.ru/search?start=#{count*10}&rls=ru&q=#{q}&sourceid=#{@sourceid[sid]}&ie=utf-8&oe=utf-8&channel=suggest")
          page.search('//cite').each{|s|
            sites << "http://"+s.inner_text
          }
        }
        sites.each{|s|
          begin
            sitesurl << URI.split(s)[2]
          rescue
          end
        }
        sitesurl.each{|s|
          begin
            shash[s] += 1
          rescue
            shash[s] = 1
          end
        }
        return shash
      end
    end
     
    test = GoogleSearch.new
     
    sites1 = test.parse("запрос 1",10,0)
    sites2 = test.parse("запром 2") 
    
     
    #171 DarkMist, 3 Dec 2012
    Last edited: 11 Dec 2012
  12. Vip77

    Vip77 Elder - Старейшина

    Joined:
    29 Sep 2012
    Messages:
    281
    Likes Received:
    55
    Reputations:
    20
    ищю вeб бэкдор на rubby, помогите пожалуйста
     
  13. -=SmallPox=-

    -=SmallPox=- New Member

    Joined:
    15 Sep 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Подскажите с циклом!!!

    Решил спс
     
    #173 -=SmallPox=-, 17 Sep 2013
    Last edited: 22 Sep 2013
  14. webdings123

    webdings123 New Member

    Joined:
    8 Dec 2012
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    upd: решил
     
    #174 webdings123, 28 Sep 2013
    Last edited: 5 Oct 2013
  15. TikTik

    TikTik Member

    Joined:
    20 Feb 2009
    Messages:
    241
    Likes Received:
    12
    Reputations:
    2
    Code:
    require 'net/http'
            
    puts "Ykazat url"
    target = gets.chomp.to_s
    otvet = ""
    pochta = []
    zagolovok = { 'User-Agent' => "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}
    client = Net::HTTP.new("www.google.com")
    poisk = ["100", "200","300", "400", "500"]
    poisk.each { |org|
    resp, data = client.get2("/search?hl=en&lr=&ie=UTF-8&q=%40"+target+"&start=#{org}&sa=N&filter=0&num=100",zagolovok)
    otvet << data
    }
    puts "Rezultat:"
    otvet.gsub!(/<.?em?[>]*>/, "")
    otvet.scan(/[A-Z0-9._%+-]+@#{target}/i) do |t|
    pochta << t
    puts pochta.uniq
    end
    gets.chomp
    #File.open('log.txt', 'a'){ |f| f.puts("#{pochta.uniq}\n") } запись в файл
    
    otvet << data

    инетересует вот эта часть кода а именно эти << две стрелочки к сожалению пока прочел только Крис Пайна только это в этом коде понять не могу
     
  16. Syntaxys

    Syntaxys Elder - Старейшина

    Joined:
    2 Sep 2007
    Messages:
    61
    Likes Received:
    10
    Reputations:
    0
    TikTik, добавляет к существующей строке строку, что была передана в качестве аргумента. Так же как += или concat.

    Code:
    str = "www."
    str << "site.ru"
    str #=> "www.site.ru"
     
  17. wanttoask

    wanttoask New Member

    Joined:
    30 Sep 2012
    Messages:
    81
    Likes Received:
    1
    Reputations:
    0
    помогите, пожалуйста, с функцией поиска в строках. Например: есть массив mas['красный', 'синий', 'зеленый'] и строка 'красный флаг', надо найти значение массива наиболее совпадающее со строкой. Вот то что я у меня, но работает не очень хорошо.
    Code:
    def search(masiv,word)
      n=1
      koef=0
      mas=0
      while mas<masiv.length
        while n<=word.length
          if word[n]==masiv[mas][n]
            koef+=1
          end
          n=n+1
        end
         if (koef/(word.length-2)*100)<60
            return false
         end
         if (koef/(word.length-2)*100)>60
            return true
         end
        mas=mas+1
      end
    end
    n=1 потому что строка str='привет' str[0]='
     
  18. madhatter

    madhatter Member

    Joined:
    7 Aug 2013
    Messages:
    562
    Likes Received:
    50
    Reputations:
    54
    Прежде всего - не надо так омерзительно именовать переменные. Годный поиск - вообще довольно сложная тема, об этом не одна книга написана, но полное вхождение подстроки реализуется довольно просто.
    Code:
    array.find_all{ |el|; el.to_s[word.to_s] }
    Вернет все приводимые к строке элементы массива, в которых будет вхождение приводимого к строке word. К вашему примеру это вполне подойдет.
     
  19. wanttoask

    wanttoask New Member

    Joined:
    30 Sep 2012
    Messages:
    81
    Likes Received:
    1
    Reputations:
    0
    спасибо огромное! Мой код заработал, но ваш, конечно, быстрее
     
  20. madhatter

    madhatter Member

    Joined:
    7 Aug 2013
    Messages:
    562
    Likes Received:
    50
    Reputations:
    54
    ruby предоставляет много встроенных плюшек для обработки данных в том числе. поэтому многие вещи просто реализуются одной строкой. у фитцжеральда была неплохая книга на эту тему, советую.