logo       

replacing values in some files: line endings etc: msg#01041

lang.ruby.general

Subject: replacing values in some files: line endings etc

Hi,

on Windows, I need to replace some values in a file; see the program below.

1. ff

The file is in Unix fileformat; but when Ruby wrote to it, there are
DOS line endings instead of Unix one, AFAICS.
That's what I think what happens.

What I see is:
I open the file in Vim (which is ff=unix); everything looks fine. I run the Ruby program, then Vim prompts me to relaod the file; after this, every line ends in ^M.
When I reopen the file in Vim, everything looks OK again; I think Vim
converts the dos line endings automatically since I have
set ff=unix
in my vimrc.

I really would prefer if Ruby would only gsub the stuff I ask it to,
not the line endings.

2. gsub

How could I match a longer string, but replace only a part of it?
eg ~
string.gsub! /<(embed|object).+?width="\d+"/, "width=\"#{w}\""
... but the <object etc should stay.

3. Golf

What's a shorter / more elegant version of the program?
s.th. in the style of: grep /dimensions/, sed s/old/new/

Tobi

########################################
SVG = 'links.svg'
d = Dir.new './'
HTMLs = d.grep /^svg.*\.html$/
def get_new_dimensions
open(SVG) do |svg|
svg.read.scan \
/<svg\s+width="(.+?)"\s+height="(.+?)"/m
[($1.delete'px'),$2.delete'px']
end
end
w,h = get_new_dimensions
HTMLs.each do |html_file_name|
string = open(html_file_name) do |html_file|
html_file.read
end
# how to write these in one (gsub) line?
string.gsub! /width="\d+"/, "width=\"#{w}\""
string.gsub! /height="\d+"/, "width=\"#{h}\""
open(html_file_name,'w') do |html_file|
# changes line endings :(
html_file.write string
end
end
########################################

--
http://www.pinkjuice.com/




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise