在RUBY中基于关键字删除文本文件中的行

在RUBY中基于关键字删除文本文件中的行,ruby,file,Ruby,File,我正在创建一个程序,将用户存储在一个文本文件中,并希望根据关键字删除/修改一行。这是我现在用来搜索关键字的代码,作为回报,它将打印包含关键字的整行代码: keyword = File.readlines('skier_info.txt') matches = keyword.select { |name| name[/#{search}/i] } 我想知道如何使用这一小段代码将文本文件中的每一行都写入一个新的行,除了从“matches”变量中得到的一行。这样您就

我正在创建一个程序,将用户存储在一个文本文件中,并希望根据关键字删除/修改一行。这是我现在用来搜索关键字的代码,作为回报,它将打印包含关键字的整行代码:

        keyword = File.readlines('skier_info.txt')
        matches = keyword.select { |name| name[/#{search}/i] }

我想知道如何使用这一小段代码将文本文件中的每一行都写入一个新的行,除了从“matches”变量中得到的一行。

这样您就可以确定要删除的行了?这是工作的70%。快到了


现在,您只需创建一个新文件,并将现有文件中的所有行(不需要的行除外)写入其中。编写完新文件后,可以将其复制到旧文件上。

只需对代码进行最少的修改:

keyword    = File.readlines('skier_info.txt')
no_matches = keyword.reject { |name| name[/#{search}/i] }

File.open('new_skier_info.txt','w+'){|out| out.puts no_matches}
与之相反的是:

如果您的输入文件很大,并且不想在内存中全部读取:

File.open('new_skier_info.txt','w+') do |out| 
  File.foreach('skier_info.txt') do |line|
    out.puts line unless line =~ /#{search}/i
  end
end

您也可以在terminal中使用;)

谢谢你的回复,塞吉奥!我对Ruby很陌生,所以我不知道该怎么做。。。你能再帮我一点忙吗?:)@VetleOttemFrantzvaag:新事物并不是不使用搜索的借口。看看这一条:我的公式很糟糕。我的问题不是写一个文件,而是如何从文件中选择每一行,除了我搜索的那一行。@VetleOttemFrantzvaag啊,这很简单。使用
拒绝
而不是
选择
。在不需要时将整个文件读入内存有点不太好。
File.open('new_skier_info.txt','w+') do |out| 
  File.foreach('skier_info.txt') do |line|
    out.puts line unless line =~ /#{search}/i
  end
end