我有这个代码:
File.foreach("testfile.txt") { |line| print line }
lines = File.readlines("testfile.txt")
lines.each { |line| print line }
Run Code Online (Sandbox Code Playgroud)
前任。我如何编辑它以获取特定行testfile.txt?
$text2 = gets("some code to give me text on line 2 from textfile.txt").chomp
Run Code Online (Sandbox Code Playgroud)
因此,我想运行一个程序来搜索 4 个任何人都可以编辑的不同变量。这些将位于单独的文件中,因此不必重写代码即可更改一组新搜索案例的测试。
假设我有一个文档(我认为文本是最简单的,但可能是错误的),如下所示:
Tea
Coffee
Hot Chocolate
Cookies
Run Code Online (Sandbox Code Playgroud)
这就是文件中的全部内容。另一个文件(.rb)提取这些变量并在谷歌或其他地方搜索它们。如果代码以字节为单位读取,那么我将无法将变量更改为更长或更短的值。
该文件说是可行的
1:Tea
2:Coffee
3:Hot Chocolate
4:Cookies
Run Code Online (Sandbox Code Playgroud)
只要代码只会提取“茶”或“咖啡”,而不是前面的数字。
听起来您不想返回与特定模式匹配的行,但您想按行号进行抓取。
解决方案一:
def read_line_number(filename, number)
return nil if number < 1
line = File.readlines(filename)[number-1]
line ? line.chomp : nil
end
Run Code Online (Sandbox Code Playgroud)
解决方案 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
Run Code Online (Sandbox Code Playgroud)
解决方案 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
Run Code Online (Sandbox Code Playgroud)
用法:
text = read_line_number("testfile.txt", 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4474 次 |
| 最近记录: |