用于在文件中搜索单词的Ruby程序

时间:2015-07-03 08:38:32

标签: ruby argv

我昨天开始使用Ruby,我只有一些C经验。 现在我正在尝试编写一个程序,它从ARGV中获取一个文件和一个单词来搜索该文件,并打印出该单词出现的次数。摆脱了任何错误,但是当我测试时它仍然打印0。

if ARGV.size !=2
        puts "INSERT A FILE AND A WORD OR A CHAR TO SEARCH FOR"
        exit 1
else
        file = File.open(ARGV[0], mode = "r")
        word = ARGV[1]
        if !file
                puts "ERROR: INVALID INPUT FILE"
                exit 1
        end
        while true
                begin
                i = 0
                count_word = 0
                string = []
                string[i] = file.readline
                if string[i].upcase.include? word.upcase
                        count_word += 1
                end
                i += 1
                rescue EOFError
                break
                end
        end
        print "The word searched is  ", word, "  Frequency: ", count_word, "\n"
end

我希望你能告诉我什么是错的(我相信我在计算时做错了),先谢谢。

2 个答案:

答案 0 :(得分:1)

关于Ruby的一个好处,它可以在更高层次的抽象上运行。这是一个可以满足您需求的片段:

if ARGV.size != 2
  puts "Provide file to be searched in and word to be found"
  exit 1
end

file = ARGV[0]
word = ARGV[1]

count = 0
File.open(file, 'r').each { |line| count += 1 if line.downcase.include? word.downcase }

puts "The word searched is #{word}  Frequency: #{count}"

正如您所看到的,该语言提供了许多功能,如字符串插值,文件内容的枚举等。

您提供的代码存在一些问题。从缩进等样式问题到关于语言的错误假设,如if !file检查和整体上的奇怪决定 - 如果您只想要当前行,为什么要使用列表。

我建议你看看http://tryruby.org/。它很短,会让你感受到Ruby的做事方式。它还涵盖了您的问题(处理文件)。

作为一般说明,当您在stackoverflow上发布问题时,请在问题中包含代码,而不是链接到外部页面。通过这种方式,人们可以更快地阅读它,编辑它,如果其他网站出现故障,代码也不会丢失。如果您想要显示代码段,您仍然可以链接到外部页面。

答案 1 :(得分:0)

希望这会对你有所帮助,你所犯的错误就是你包含了这部分:

  i = 0
  count_word = 0
  string = []

进入while循环,每次将你的计数器重置为零,即使它找到了这个单词,所以要在这里纠正这个错误:

if ARGV.size !=2
  puts "INSERT A FILE AND A WORD OR A CHAR TO SEARCH FOR"
  exit 1
else
  file = File.open(ARGV[0], mode = "r")
  word = ARGV[1]
  if !file
    puts "ERROR: INVALID INPUT FILE"
    exit 1
  end
  i = 0
  count_word = 0
  string = []
  while true
    begin

      string[i] = file.readline
      if string[i].upcase.include? word.upcase
        count_word += 1
      end
      i += 1
    rescue EOFError
      break
    end
  end
  print "The word searched is  ", word, "  Frequency: ", count_word, "\n"
end