0

ロギングスクリプトをゆっくりと書いているときに、ある種の問題にぶつかりました。プログラムの大部分が機能するようになりましたが、今は、入力できるものとできないものの制限など、いくつかの生き物の快適さを追加しています。

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を使ってみましたが、あまり効果がないようです。複数の変数を保存するのはどうですか?

4

1 に答える 1

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 には 1 つの値しかありません。メソッドが最後に到達する前に、ユーザーは新しい値を入力するように応答されるため、最終的に終了すると、以前の呼び出しが実行を継続します。おそらく、次の例が理解に役立ちます。

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

method(1)

出力:

$ ruby /tmp/test.rb
5
4
3
2
1
于 2012-10-10T20:36:39.847 に答える