假设我有一个input.txt文件,其中包含以下文本:
First line
Second line
Third line
Fourth line
例如,我想删除第二行和第四行以获取此信息:
First line
Third line
到目前为止,我已经成功使用此代码删除了第二行
require 'fileutils'
File.open('output.txt', 'w') do |out_file|
File.foreach('input.txt') do |line|
out_file.puts line unless line =~ /Second/
end
end
FileUtils.mv('output.txt', 'input.txt')
在Ruby中删除文本文件中多行的正确方法是什么?
在一般情况下,从文本文件中干净有效地删除行是“困难的”,但是如果可以在某种程度上限制问题的话,这可能很简单。
以下是来自SO的一些问题,它们提出了类似的问题:
还有很多其他的。
就您而言,如果您的输入文件相对较小,则可以轻松负担使用所用方法的负担。确实,唯一需要更改以符合您的条件的就是将输入文件循环和条件修改为此:
File.open('output.txt', 'w') do |out_file|
File.foreach('input.txt').with_index do |line,line_number|
out_file.puts line if line_number.even? # <== line numbers start at 0
end
end
with_index
所做的更改是使用方法来捕获行号,由于可以在没有块的情况下File#foreach
返回一个Enumerator
when ,因此可以使用该方法。现在with_index
,该块适用于,并获得行号作为第二个块参数。只需在比较中使用行号即可为您指定条件。
即使对于较大的文件,此方法也可以扩展,而将整个文件读入内存的解决方案对文件大小的上限非常低。使用此解决方案,您会受到可用磁盘空间和读取/写入文件速度的限制。例如,对空间有限的在线存储执行此操作可能无法达到您想要的效果。假设您有可用空间,则写入本地磁盘或拇指驱动器应该完全没有问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句