如何使用ruby获取文件中单词的行号

时间:2015-02-27 08:23:51

标签: ruby file

假设我有一个文件。我想写一个带文件和单词的函数。并返回该单词的行号

def get_line_number(file, word)
 #logic
 return line_num
end 

3 个答案:

答案 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。