我有这个代码:
File.foreach("testfile.txt") { |line| print line }
lines = File.readlines("testfile.txt")
lines.each { |line| print line }
例。我如何编辑它以获取 testfile.txt
中的特定行?
$text2 = gets("some code to give me text on line 2 from textfile.txt").chomp
因此,我想运行一个程序来搜索 4 个任何人都可以编辑的不同变量。这些将在一个单独的文件中,因此不必为了更改一组新搜索案例的测试而重写代码。
假设我有一个如下所示的文档(我想文本是最简单的但可能是错误的):
Tea
Coffee
Hot Chocolate
Cookies
这就是文件中的全部内容。另一个文件 (.rb) 提取这些变量并在谷歌或其他任何地方搜索它们。如果代码以字节为单位读取,那么我将无法将变量更改为更长或更短的值。
文档说是可行的
1:Tea
2:Coffee
3:Hot Chocolate
4:Cookies
只要代码只会提取“Tea”或“coffee”,而不是前面的数字。
最佳答案
听起来你不想返回匹配特定模式的行,但你想按行号抓取。
解决方案一:
def read_line_number(filename, number)
return nil if number < 1
line = File.readlines(filename)[number-1]
line ? line.chomp : nil
end
解决方案 2a - 效率更高一些,因为它不会尝试读取整个文件:
require 'english'
def read_line_number_1a(filename, number)
found_line = nil
File.foreach(filename) do |line|
if $INPUT_LINE_NUMBER == number
found_line = line.chomp
break
end
end
found_line
end
解决方案 2b - 也很高效,但功能更强大(尽管我还没有检查 detect
是否会读取到文件末尾)
def read_line_number(filename, match_num)
found_line, _idx =
File.enum_for(:foreach, filename).each_with_index.detect do |_cur_line, idx|
cur_line_num = idx+1
cur_line_num == match_num
end
found_line.chomp
end
用法:
text = read_line_number("testfile.txt", 2)
关于ruby - 从 ruby IO 中的外部文件读取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760883/