2017-05-12 3 views
1

ファイルからユーザーID、たとえばncr \ yui30nを読み込み、そのユーザーIDがファイルのいずれかに存在するかどうかを確認します私は以下のコードでそれを行うことができます。Rubyの削除または置換された文字列を出力ファイルに取り込みます

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:\ナノ\のids_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 

私は以下のパターンに

を出力ログファイルを作成しようとしていますRemoved_users.log

Removed user : ncr\yui30n 
Removed from : ids_access.txt (if present in multiple files record that too) 
Pool : @digital_owner 

私だけで来ることができますスニペットの下の部分は、第2ループの内側にあります。

File.open("E:\Removed_users.log", "a") { |log| 
     log.puts "Removed from: #{file_name}" 
     log.puts "Removed user : #{line}" 
     log.puts "*" * 50 
     } 

問題は、すべてのアクセスファイルを検索して記録していますが、文字列が削除された場所からファイルを取得するだけで、プール名を取得する方法がわかりません。下記の例で@digital_ownerと言います。

お願いします。ありがとう。私は非常にルビーの新しさとまだ学習段階ですので、その簡単な質問の言い訳をしてください。

答えて

1

あなたが任意の変化(すなわち交換)が行われたかどうかを確認するためにreplacetextを比較し、ifまたはunless文の中で、あなたのコードを追加することができます。

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 } 

へ:

File.write(file_name, replace) 
+0

パーフェクトを、私は「もし」ループに考えを与えたが、オプションではない。別の提案をありがとうございます。 +1 – Goku

関連する問題