假设我有一个文件。我想写一个带文件和单词的函数。并返回该单词的行号
def get_line_number(file, word)
#logic
return line_num
end
答案 0 :(得分:1)
def get_line_number(file, word)
count = 0
file = File.open(file, "r") { |file| file.each_line { |line|
count += 1
return count if line =~ /#{word}/
}}
end
逐行阅读的优点是,当您的文件太大时,您的资源不会很重。
答案 1 :(得分:1)
你可以把它写成
def get_line_number(file, word)
line_num = File.foreach(file).with_index(1) do |line, index |
break index if line.include? word
end
return line_num unless line_num.nil?
end
让我们测试代码:
[shreyas@so (master)]$ tree
.
├── a.rb
└── out.txt
0 directories, 2 files
[shreyas@so (master)]$ cat out.txt
aaaa
bbbb
cccc
aaaa
[shreyas@so (master)]$ cat a.rb
def get_line_number(file, word)
line_num = File.foreach(file).with_index do |line, index |
break index + 1 if line.include? word
end
return line_num unless line_num.nil?
end
p get_line_number "#{__dir__}/out.txt", 'cc'
[shreyas@so (master)]$ ruby a.rb
3
[shreyas@so (master)]$
答案 2 :(得分:1)
您可以执行类似
的操作def get_line_number(io, word)
io.each_line.find_index { |line| line.include?(word) }
end
但要注意,行从0开始枚举,所以如果它在第一行找到一个单词,我将返回0.如果文本中没有这样的单词,它将返回nil。