[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Newb: Search & Replace

Art Gillespie

12/31/2005 8:30:00 AM

Hi all,

I'm implementing build automation in Ruby as a 'learn Ruby' exercise.
I wanted to post the following code and solicit feedback on any idioms
I might have missed with regards to text processing with Ruby. The
code works--I'm just wondering if it should be shorter, or smarter,
or...

Thanks,

Art

---

#!/usr/bin/env ruby

VERSION_HEX=ARGV[0]

File.open("iDrum_prefix.h.tmp", "w") do |ofile|
File.open("iDrum_prefix.h") do |file|
file.each do |line|
if line =~ /^#define kIDComponentVersion\t*(.*)/
ofile.puts line.sub($1, "#{VERSION_HEX}")
else
ofile.puts line
end
end
end
end

File.rename("iDrum_prefix.h.tmp", "iDrum_prefix.h")


5 Answers

Wybo Dekker

12/31/2005 11:11:00 AM

0

Robert Klemme

12/31/2005 1:31:00 PM

0

Wybo Dekker <wybo@servalys.nl> wrote:
> On Sat, 31 Dec 2005, Art Gillespie wrote:
>
>> #!/usr/bin/env ruby
>>
>> VERSION_HEX=ARGV[0]
>>
>> File.open("iDrum_prefix.h.tmp", "w") do |ofile|
>> File.open("iDrum_prefix.h") do |file|
>> file.each do |line|
>> if line =~ /^#define kIDComponentVersion\t*(.*)/
>> ofile.puts line.sub($1, "#{VERSION_HEX}")
>> else
>> ofile.puts line
>> end
>> end
>> end
>> end
>>
>> File.rename("iDrum_prefix.h.tmp", "iDrum_prefix.h")
>
> with rio, you can edit a file inplace;
> this changes all x into y in file z:
>
> #!/usr/bin/ruby
> require 'rubygems'
> require 'rio'
> rio('z') < rio('z').read.gsub(/x/,'y')

Um, rio is not needed:

Robert@Babelfish2 /c/TEMP
$ echo 'x' > iDrum_prefix.h

Robert@Babelfish2 /c/TEMP
$ cat iDrum_prefix.h
x

Robert@Babelfish2 /c/TEMP
$ ruby -i.tmp -pe "gsub /x/, 'y'" iDrum_prefix.h

Robert@Babelfish2 /c/TEMP
$ cat iDrum_prefix.h
y

:-))

robert

Wybo Dekker

12/31/2005 1:56:00 PM

0

Ryan Leavengood

12/31/2005 4:26:00 PM

0

On 12/31/05, Art Gillespie <agillesp@gmail.com> wrote:
> Hi all,
>
> I'm implementing build automation in Ruby as a 'learn Ruby' exercise.
> I wanted to post the following code and solicit feedback on any idioms
> I might have missed with regards to text processing with Ruby. The
> code works--I'm just wondering if it should be shorter, or smarter,
> or...

That is nice and idiomatic from my perspective. In fact I've written
code much like that to do what you are doing. While there might be
various tricks and hacks to make it shorter, they probably aren't
needed.

Ryan


Art Gillespie

12/31/2005 7:15:00 PM

0

Thanks for the replies, everyone. I wound up with

def do_substitution( filename )
File.open("#{filename}.tmp", "w") do |ofile|
File.open("#{filename}") do |file|
file.each do |line|
yield ofile, line
end
end
end
File.rename("#{filename}.tmp", "#{filename}")
end

Which is probably overkill for my needs, but got me learning about
blocks and is flexible. And fun!

Thanks again.

Art

On 12/31/05, Ryan Leavengood <leavengood@gmail.com> wrote:
> On 12/31/05, Art Gillespie <agillesp@gmail.com> wrote:
> > Hi all,
> >
> > I'm implementing build automation in Ruby as a 'learn Ruby' exercise.
> > I wanted to post the following code and solicit feedback on any idioms
> > I might have missed with regards to text processing with Ruby. The
> > code works--I'm just wondering if it should be shorter, or smarter,
> > or...
>
> That is nice and idiomatic from my perspective. In fact I've written
> code much like that to do what you are doing. While there might be
> various tricks and hacks to make it shorter, they probably aren't
> needed.
>
> Ryan
>
>