私は、数十万の小さな XML ファイルをクリーンアップするための非常に単純なスクリプトに取り組んでいます。私の現在の方法は、ディレクトリを反復処理し、(ファイルごとに) ファイルを読み取り、使用String::gsub!
してすべての変更を行い (これが最適かどうかはわかりません)、新しい内容をファイルに書き込みます。私のコードは次のようになります。
Dir.entries('.').each do |file_name|
f = File.read( file_name )
f.gsub!( /softwareiconneedsshine>(.|\s)*<\/softwareiconneedsshine>/i, '' )
f.gsub!( /<rating>(.|\s)*<\/rating>, '' )
f.gsub!( /softwareIdentifiers>/, 'version_history>' )
#some more regex's
File.open( file_name, 'w' ) { |w| w.write(f) }
end
これはすべてうまく機能しているように見えますが、なんらかの理由で (私の人生では理解できません) gsub!
、最初に示した 2 つのコマンドに似たコマンドでプログラムが勝手にハングするようです。ただし、ランダムにハングします (ただし、これらの時点でのみ)。うまくいくこともあれば、ハングアップすることもあります。なぜそれが時々うまくいくのか、それ以外のときはうまくいかないのか本当にわかりませんか???
どんな助けでも大歓迎です!!