Project

General

Profile

Actions

Misc #8329

closed

Cannot change \r\n to \n (Windows/DOS to Unix)

Added by mghomn (Justin Peal) almost 11 years ago. Updated almost 11 years ago.

Status:
Rejected
Assignee:
-
[ruby-core:54593]

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

Actions

Also available in: Atom PDF

Like0
Like0