gpt4 book ai didi

ruby - 如何删除文本文件中的特定行?

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:36 25 4
gpt4 key购买 nike

假设,我有一个包含以下文本的 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<,因此可以使用该方法 在没有 block 的情况下调用时;该 block 现在应用于 with_index,并获得行号作为第二个 block 参数。只需在比较中使用行号即可获得指定的标准。

这种方法可以扩展,即使对于有些大的文件也是如此,而将整个文件读入内存的解决方案对文件大小的上限相当低。使用此解决方案,您将受到可用磁盘空间和读/写文件速度的更多限制;例如,对空间有限的在线存储执行此操作可能不会像您希望的那样有效。假设您有可用空间,写入本地磁盘或拇指驱动器应该完全没有问题。

关于ruby - 如何删除文本文件中的特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com