Misc #8329
closedCannot change \r\n to \n (Windows/DOS to Unix)
Description
I want to change all of my ruby files to UTF-8 encoded and Unix format, but after the running of the following program, the files' formats are still Windows/DOS (\r\n) but not Unix (\n). How could I do?¶
class String
def utf8?
self =~ /\A\p{Assigned}*\z/
rescue
false
end
end
class Tounix
def replace text
text.gsub(/\x0d\x0a/, "\n")
end
def load filename_rb
text = File.read(filename_rb, :mode => 'rt:bom|utf-8')
unless text.utf8?
text = File.read(filename_rb, :mode => 'rt:gb18030')
text = text.encode('utf-8')
end
text
end
def save filename_rb, new_text
File.write(filename_tm = filename_rb + '.t~m~p', new_text, :mode => 'wb:utf-8')
File.rename(filename_tm, filename_rb)
end
def parse filename_rb
text = load(filename_rb)
new_text = replace(text)
save(filename_rb, new_text) if changed = (new_text != text)
yield changed if block_given?
end
def search pattern
Dir.glob(pattern) do |filename_rb|
parse(filename_rb) do |changed|
yield filename_rb, changed if block_given?
end
end
end
end
if $0 == FILE
Tounix.new.search('**/*.rb') do |filename_rb, changed|
print '%-9s' % (changed ? 'Changed' : ''), filename_rb, "\n"
end
end