从终端运行文件时如何使用gets?

时间:2013-07-30 01:47:19

标签: ruby command-line gets

我正在尝试从命令行执行此程序,而我无法使用gets.chomp,而是返回键值。

我正在输入:ruby name_of_file.rb name_of_file.txt

def caesar_cipher(key)
  s = gets.chomp
  encoded = ""

  s.each_byte do |l|
    if ((l >= 65 && l <= 90) || (l >= 97 && l <= 122))
      encoded += (l+key).chr
    else
      encoded += l.chr
    end
  end
  encoded
end

File.readlines(ARGV[0]).map(&:to_i).each {|key| puts caesar_cipher(key)}

我知道程序没有完全执行caesar密码,我只想弄清楚如何从命令行运行它而不必使用pry或irb。

2 个答案:

答案 0 :(得分:1)

您想手动输入密码?

使用STDIN.gets

答案 1 :(得分:1)

@vgoff有答案,但这是我如何重写代码以使其更具可读性:

def caesar_cipher(key)

  encoded = ""

  s = STDIN.gets.chomp

  s.each_char do |l|
    case l
    when 'A' .. 'Z', 'a' .. 'z'
      encoded += (l.ord + key).chr
    else
      encoded += l
    end
  end

  encoded

end

# File.readlines(ARGV[0]).map(&:to_i).each {|key| puts caesar_cipher(key)}
puts caesar_cipher(0)
puts caesar_cipher(1)

我可能会使用each_char来维护字符编码,而不是将字符拆分为字节。我使用case语句让我使用两个范围来干净地定义大写和小写字符,并使用ord来获取字符的实际序数值,而不是字节。< / p>

它更具可读性,但可能无法完全满足您的需求。