2017-05-13 20 views
0

以下の形式のファイルが複数ありますRubyは文字列の後にカンマを削除します

例:ファイル: - クラスの\ 234ヘクタール

id = class\234ha, class\poi23, class\opiuj, cap\7y6t5 
dept = sub\6985de, ret\oiu87, class\234ha 
cko = cyr\hui87 

SAMPLE.TXT私は、文字列を見つけることだし、複数のfiles.Likeからそれを削除する、文字列を検索し、削除します。

私のコードは正常に動作しており、目的の文字列がすべて削除されていますが、目的の文字列またはマークされた文字列が削除された後に、行末に末尾にカンマがあります。

例:文字列を除去した後にsample.txt - 私は最後のカンマを削除したい\ 234ヘクタール

id = class\poi23, class\opiuj, cap\7y6t5 
dept = sub\6985de, ret\oiu87, 
cko = cyr\hui87 

クラスは、のみのRETの\ oiu87、後.ITは、複数のファイルで同じでなければなりません。コンマの後に改行文字やスペースがあるかどうかはわかりません。どうすればそれを動作させることができますか?前もって感謝します。

コード

pool = '' 
svn_files = Dir.glob("E:\work'*-access.txt") 

value=File.open('E:\nando\list.txt').read 
value.each_line do |line| 
    line.chomp! 
    print "VALUE: #{line}\n" 
    svn_files.each do |file_name| 
     text = File.read(file_name) 
     replace = text.gsub(/#{Regexp.escape(line)}\,\s/, '').gsub(/#{Regexp.escape(line)}/, '') 

     unless text == replace 

     text.each_line do |li| 
      if li.match(/#{Regexp.escape(line)}/) then 
      #puts "Its matching" 
      pool = li.split(" ")[0] 
      end 
     end 
     File.open('E:\Removed_users.txt', 'a') { |log| 
     log.puts "Removed from: #{file_name}" 
     log.puts "Removed user : #{line}" 
     log.puts "Removed from row :#{pool}" 
     log.puts "*" * 50 
     } 
     File.open(file_name, "w") { |file| file.puts replace } 
     end 
    end 
end 

答えて

1

複雑な正規表現の悪です。アプリケーションドメインが本当に必要としない限り、それらを使用しないでください。代わりに、複数のパスを実行します。私はあなたの意図した置換が何であるか本当にわからないんだけど、構造的にこれはあなたが何をしたいです:

id = class\poi23, class\opiuj, cap\7y6t5 
dept = sub\6985de, ret\oiu87 
cko = cyr\hui87EOF 

# Create an interim string using your existing substitutions. For example, 
# the corpus you currently have after substitutions contains: 
tmp_str = <<~'EOF' 
    id = class\poi23, class\opiuj, cap\7y6t5 
    dept = sub\6985de, ret\oiu87, 
    cko = cyr\hui87EOF 
EOF 

# Remove trailing commas. 
final_str = tmp_str.gsub /,\s*$/m, '' 

puts final_str 

これは、画面に次のような出力を送信しますこの方法では、行単位で作業するか、複数行の文字列で作業するかは関係ありません。いずれにしても、各行の末尾にカンマとスペースを取り除くだけです。シンプル!

+0

あなたが提案したとおりに私は以前に試しましたが、うまくいきませんでした。私は今、質問全体に私のコード全体を入れました。私の質問を調べるのに大いに感謝しています。 – dev

+0

私はコードを修正しました。正規表現に*を含めるようにあなたの提案が鍵です。たくさんありがとうございます。申し訳ありませんが私はdidntとして十分な評判 – dev

関連する問題