将Ruby中删除或替换的字符串捕获到输出文件中

将Ruby中删除或替换的字符串捕获到输出文件中,ruby,Ruby,我正在从一个文件中读取用户id,比如ncr\yui30n,并检查该用户id是否存在于任何一个或多个文件中,如果存在,请将其删除。我可以使用下面的代码来完成此操作 svn_files = Dir.glob("E:\nano\*_access.txt") value=File.open('E\new_dir\access_list.txt').read value.each_line do |line| line.chomp! print "Z ID: #{line}\n"

我正在从一个文件中读取用户id,比如ncr\yui30n,并检查该用户id是否存在于任何一个或多个文件中,如果存在,请将其删除。我可以使用下面的代码来完成此操作

svn_files = Dir.glob("E:\nano\*_access.txt")

value=File.open('E\new_dir\access_list.txt').read
value.each_line do |line|
    line.chomp!
    print "Z ID: #{line}\n"
    svn_files.each do |file_name|
      print "checking in file:#{file_name}\n"
      text = File.read(file_name)
      replace = text.gsub( /#{Regexp.escape(line)}\,\s/, '' )
      File.open(file_name, "w") { |file| file.puts replace }
    end
end
我试图用我的代码扩展的是,捕获字符串,比如(ncr\yui30n)从哪个文件中删除,并且从哪个池中删除该字符串,该字符串在特定文件中与输出日志文件相关联

例如E:\nano\ids\u access.txt

# Digital created on July 2016
# Digital Owner: John Cena (jxcgo)
# Digital access: create delete access

[pool]
@rem = ncr\abc_efg_dev, ncr\abc_efg_test, ncr\jx8go5, ncr\atxe5t
@digital_owner = ncr\yui30n, ncr\bhyrl4
我正在尝试以下面的模式创建输出日志文件

已删除\u用户。日志

Removed user : ncr\yui30n
Removed from : ids_access.txt (if present in multiple files record that too)
Pool : @digital_owner
我只能在第二个循环中提供以下片段:

 File.open("E:\Removed_users.log", "a") { |log| 
         log.puts "Removed from: #{file_name}"
         log.puts "Removed user : #{line}"
         log.puts "*" * 50 
        }
问题是,它记录了每个访问文件及其搜索,但我只想捕获从中删除字符串的文件,我也不确定如何获取池名,在下面的示例中是@digital_owner


有什么建议吗。谢谢我对ruby非常陌生,仍处于学习阶段,因此请原谅这是一个简单的问题。

您可以在
if
除非
语句中添加代码,比较
text
replace
以查看是否进行了任何更改(即替换);大概是这样的:

svn_files = Dir.glob("E:\nano\*_access.txt")

value=File.open('E\new_dir\access_list.txt').read
value.each_line do |line|
    line.chomp!
    print "Z ID: #{line}\n"
    svn_files.each do |file_name|
      print "checking in file:#{file_name}\n"
      text = File.read(file_name)
      replace = text.gsub( /#{Regexp.escape(line)}\,\s/, '' )

      unless text == replace
        File.open("E:\Removed_users.log", "a") { |log| 
          log.puts "Removed from: #{file_name}"
          log.puts "Removed user : #{line}"
          log.puts "*" * 50 
        }
        File.open(file_name, "w") { |file| file.puts replace }
      end
    end
end
既然您已经在进行比较,那么最好也将您的文件更新包含在该语句中


与您的问题无关,但您可以简化代码更改此行:

File.open(file_name, "w") { |file| file.puts replace }
致:


很好,我考虑了“如果”循环,但没有考虑“除非”选项。谢谢你的建议+1.
File.write(file_name, replace)