我昨天开始使用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
我希望你能告诉我什么是错的(我相信我在计算时做错了),先谢谢。
答案 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