From: Alex DeCaria on
In switching to Ruby 1.9 from 1.8 I notice that the behavior of the '$,'
output separator has changed. In Ruby 1.9 the output separator is
placed after a newline character, but this didn't happen with Ruby 1.8.
Using the following code:

------------
$, = ', '

data = [['a', 'b', 'c'], ['1', '2', '3'], ['x', 'y', 'z']]

file_out = File.new("test.csv", "w")

data.each do |elem|
file_out.print elem[0], elem[1], elem[2], "\n"
end

file_out.close
---------------

and running with Ruby 1.8 produces a file that contains

a, b, c,
1, 2, 3,
x, y, z,

but with Ruby 1.9 the contents of the file look like

a, b, c,
, 1, 2, 3,
, x, y, z,
,

Is this an intentional change of behavior?
--Alex
--
Posted via http://www.ruby-forum.com/.

From: Caleb Clausen on
On 3/5/10, Alex DeCaria <alex.decaria(a)millersville.edu> wrote:
> In switching to Ruby 1.9 from 1.8 I notice that the behavior of the '$,'
> output separator has changed. In Ruby 1.9 the output separator is
> placed after a newline character, but this didn't happen with Ruby 1.8.

That doesn't seem right.

From: David Springer on
Alex,

If you make a few minor modifications:
-------------------------------------------
$, = ', '
$\ = "\n" ### output record separator ###

data = [['a', 'b', 'c'], ['1', '2', '3'], ['x', 'y', 'z']]

file_out = File.new("test.csv", "w")

data.each do |elem|
file_out.print elem[0], elem[1], elem[2] ### no newline FIELD ###
end

file_out.close
-------------------------------------------

then you will get what you want in Ruby 1.9.
a, b, c,
1, 2, 3,
x, y, z,
I have not tried it in Ruby 1.8.

Looks like it is adding the output field separator AFTER the newline
FIELD.

--
Posted via http://www.ruby-forum.com/.

From: Robert Klemme on
On 03/05/2010 08:46 PM, Caleb Clausen wrote:
> On 3/5/10, Alex DeCaria <alex.decaria(a)millersville.edu> wrote:
>> In switching to Ruby 1.9 from 1.8 I notice that the behavior of the '$,'
>> output separator has changed. In Ruby 1.9 the output separator is
>> placed after a newline character, but this didn't happen with Ruby 1.8.
>
> That doesn't seem right.

I agree. 1.9 writes one field separator too much. This must be a bug.

Alex, separators are intended to be used a tad differently. You would
rather set the output record separator as well:

robert(a)fussel:~$ ruby -e '$,="@";$\="NL\n";print 1,2,3'
1@2(a)3NL
robert(a)fussel:~$

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
From: Alex DeCaria on
Should I submit a bug report, or do you think it will be eventually
noticed on this forum?
--Alex
--
Posted via http://www.ruby-forum.com/.