Stefano Crocco
1/29/2007 2:49:00 PM
Alle 15:39, lunedì 29 gennaio 2007, Emmanuel ha scritto:
> Hello, i'm working with ruby 1.8.5 on a Suse SLES 9 Linux machine.
>
> I need to replace strings inside files, specifically the string
> FECHAIMPRE
> with the current date. I had a bash script that looked like this:
>
> BOF#################################################################
> date=`date '+%d:%m:%y'`
> for item in `ls /u/sag/impresion/PRODISAA/etiquetas/lpt28*.tmp`
> do
> sed -e s/FECHAIMPRE/$date/g < $item > $item.po
> mv $item.po $item
> done
> EOF#################################################################
>
>
> And i wanted to rewrite it in ruby. I came up with this:
>
>
> #BOF#################################################################
> $fecha= Time.now.strftime("%d/%m/%Y")
>
> def UpdateDates(file)
>
> filename= file.to_s
>
> # Rename "file" to "file.temp"
> FileUtils.mv(filename, filename + ".temp")
>
> # Create "file" file
> File.open(filename, "w") do |out|
>
> # Write in "file" the modified "file.temp" lines.
> IO.foreach(filename + ".temp") do |line|
>
> if line =~ /FECHAIMPRE/
> line.gsub!(/FECHAIMPRE/, $fecha)
> end
>
> out << line
> end
>
> end
>
> # Erase the temporal
> FileUtils.rm(filename + ".temp", :force => true)
> end
>
> Dir.glob("*.tmp").each { |file| UpdateDates(file) }
>
> #EOF#################################################################
>
> But i keep thinking there has to be a shorter way. I read the ruby
> documentation
> for IO and File classes but i haven't found any better solution.
>
> What do you think about it???
>
> Thanks!
This should work (beware, it's untested).
fecha= Time.now.strftime("%d/%m/%Y")
Dir.glob("*.tmp").each do |filename|
text=File.read filename
File.open(filename,'w'){|f| f.write text.gsub(/FECHAIMPRE/,$fecha)}
end
Stefano