在ruby中清理用户输入

时间:2012-10-10 19:59:51

标签: ruby input

当我慢慢编写我的日志脚本时,我遇到了一些麻烦。我已经完成了大部分程序,但现在我只是添加了一些生物舒适,例如你可以进入的东西的限制等等。

def HitsPerMinute()

print "Is there a specific hour you would like to see: "
STDOUT.flush
mhour = spectime = gets.strip

 #mhour = mhour.to_s
 if mhour == '' or mhour == '\n' or (mhour =~ /[a-z]|[A-Z].*/)
   puts "Please enter an hour you would like to see."
   HitsPerMinute()
 #else
   #mhour = mhour.to_i
  end
    mstart = 00
    mend = 59

    mstart.upto(mend) { |x|
     moment = "#{rightnow}:#{zeroadder(mhour)}:#{zeroadder(x)}".strip
     print "Server hits at '#{moment}: "
     puts `cat /home/*/var/*/logs/transfer.log | grep -c #{moment}`
      x = x.to_i
      x = x.next
     }
 end

HitsPerMinute()

在大多数情况下,它工作得很好,除了它似乎存储之前输入的变量。如图所示。

Is there a specific hour you would like to see:  
Please enter an hour you would like to see.
Is there a specific hour you would like to see:  
Please enter an hour you would like to see.
Is there a specific hour you would like to see: d
Please enter an hour you would like to see.
Is there a specific hour you would like to see: 13
Server hits at '10/Oct/2012:13:00: 48
[...]
Server hits at '10/Oct/2012:13:59: 187
Server hits at '10/Oct/2012:0d:00: 0
Server hits at '10/Oct/2012:0d:01: 0
[...]
Server hits at '10/Oct/2012:0d:57: 0
Server hits at '10/Oct/2012:0d:58: 0
Server hits at '10/Oct/2012:0d:59: 0
Server hits at '10/Oct/2012::00: 0
Server hits at '10/Oct/2012::01: 0
[...]

我在输入变量上使用.strip,但这似乎没有为此问题做任何事情。我尝试使用.flush,但这似乎也没有做多少。甚至如何存储多个变量?

1 个答案:

答案 0 :(得分:2)

多次调用HitsPerMinute方法,当if条件结束时,它继续运行,而不是循环执行

def HitsPerMinute()

  STDOUT.flush
  mhour = ''

  while mhour == '' or mhour == '\n' or (mhour =~ /[a-z]|[A-Z].*/) do
    puts "Please enter an hour you would like to see."
    mhour = spectime = gets.strip
  end

  mstart = 00
  mend = 59

  mstart.upto(mend) { |x|
    moment = "#{rightnow}:#{zeroadder(mhour)}:#{zeroadder(x)}".strip
    print "Server hits at '#{moment}: "
    puts `cat /home/*/var/*/logs/transfer.log | grep -c #{moment}`
    x = x.to_i
    x = x.next
  }
end

HitsPerMinute()
  • 更新变量:

它没有在mhour变量上存储多个值,mhour每次调用该方法时只有一个值。在方法到达结束之前,用户被回答输入新值,所以当它最终结束时,之前的调用继续运行,这个例子可能有助于理解:

def method(i)
  if i < 5
    method(i+1)
  end
  puts i
end

method(1)

输出:

$ ruby /tmp/test.rb
5
4
3
2
1