[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Line ending problem.

sea__chan

11/6/2007 12:42:00 AM

Hi

I am writing a ruby script to insert some content into the beginning of
some files.

The files would be used in Windows or Mac, when I use File.puts method
to write the file, it changes the line ending of the file.

Any way to let ruby keep the previous line-ending of the file?

Thanks
--
Posted via http://www.ruby-....

3 Answers

Jeremy Woertink

11/6/2007 1:03:00 AM

0

Cong Chan wrote:
> Hi
>
> I am writing a ruby script to insert some content into the beginning of
> some files.

>
> Thanks

So you want to add stuff to the beginning of a file? Well, as far as I
know, you can't just add stuff to the beginning, you have to create a
new file, add your stuff, then append the old stuff at the end of the
new file.

new_file = File.new("your_new_file.txt", "w+")

new_file.write("I'm at the beginning\n")

IO.readlines("your_old_file.txt").each do |line|
new_file.write(line)
end

new_file.close


~Jeremy
--
Posted via http://www.ruby-....

Xavier Noria

11/6/2007 1:08:00 AM

0

On Nov 6, 2007, at 1:42 AM, Cong Chan wrote:

> I am writing a ruby script to insert some content into the beginning
> of
> some files.
>
> The files would be used in Windows or Mac, when I use File.puts method
> to write the file, it changes the line ending of the file.
>
> Any way to let ruby keep the previous line-ending of the file?

Not automatically.

If you know before hand that the line-ending convention is uniform you
can open the file in binary mode, pick a few bytes, and look for the
first line separator (=~ /\015?\012/).

Then write in binary mode and set $\ to that capture, aka the ouput
record separator. Use print instead of puts, since puts does not check
$\ but prints "\n" unconditionally.

-- fxn


Rick DeNatale

11/6/2007 3:16:00 PM

0

On 11/5/07, Xavier Noria <fxn@hashref.com> wrote:

> Then write in binary mode and set $\ to that capture, aka the ouput
> record separator. Use print instead of puts, since puts does not check
> $\ but prints "\n" unconditionally.

I'd suggest that rather than this you use write instead of print or
puts and put the line breaks in explicitly.

My concern over using $\ is that it's global so it affects any other
Io objects, and I'm not sure it's a thread-safe global.


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...