[英]Read Certain Lines from File
嗨刚刚进入Ruby,我正在尝试学习一些基本的文件读取命令,我还没有找到任何可靠的来源。
我试图通过该文件中的某些行,直到文件的末尾。
所以在文件里面写着FILE_SOURCES我想读取文件末尾的所有来源,并将它们放在一个文件中。
我发现打印整个文件,并替换文件中的单词,但我只是想读取文件中的某些部分。
如果你试图从某个以某种方式分隔的文件中提取一个部分,通常你会遵循这样的模式:
open(filename) do |f|
state = nil
while (line = f.gets)
case (state)
when nil
# Look for the line beginning with "FILE_SOURCES"
if (line.match(/^FILE_SOURCES/))
state = :sources
end
when :sources
# Stop printing if you hit something starting with "END"
if (line.match(/^END/))
state = nil
else
print line
end
end
end
end
您可以根据您所在文件的哪个部分从一种状态更改为另一种状态。
我会这样做(假设你可以将整个文件读入内存):
source_lines = IO.readlines('source_file.txt')
start_line = source_lines.index{ |line| line =~ /SOURCE_LINE/ } + 1
File.open( 'other_file.txt', 'w' ) do |f|
f << source_lines[ start_line..-1 ].join( "\n" )
end
相关方法:
IO.readlines
将行读入数组 Array#index
用于查找与正则表达式匹配的第一行的索引 File.open
在磁盘上创建一个新文件(完成后自动关闭) Array#[]
获取从索引到结尾的行子集 如果你无法将整个文件读入内存,那么我会对@ tadman的基于状态的文件做一个更简单的变化:
started = false
File.open( 'other_file.txt', 'w' ) do |output|
IO.foreach( 'source_file.txt' ) do |line|
if started then
output << line
elsif line =~ /FILE_SOURCES/
started = true
end
end
end
欢迎来到Ruby!
File.open("file_to_read.txt", "r") {|f|
line = f.gets
until line.include?("FILE_SOURCES")
line = f.gets
end
File.open("file_to_write.txt", "w") {|new_file|
f.each_line {|line|
new_file.puts(line)
}
new_file.close
}
f.close
}
IO函数不知道文件中的“行”是什么。 没有简单的方法可以跳到文件中的某一行,您必须全部阅读并忽略您不需要的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.