1

我正在编写一个非常简单的脚本来清理几十万个小 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!与前两个​​相似的命令处。但是,它会随机挂起(但仅在那些点上)。有时它有效,其他时候只是挂起。我真的不明白为什么它有时会起作用,但其他时候却不行???

任何帮助是极大的赞赏!!

4

1 回答 1

3

在不了解您的环境或正在阅读的文件类型的情况下,我建议您尝试让您的 kleene 星不贪婪。喜欢,(.|\s)*改为(.|\s)*?

于 2010-06-25T17:25:34.970 回答