Separate new lines from an output

Hello!

I've got this problem:

I've a range from 1..87.

I've got how to print 87 lines.

I'm trying to make 87 different objects, since if i try to push this
result into an array, the array.size is always 1. How could I have 87
different objects to push in an array?

Thanks a lot for your help!

L

···

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

It's not clear what you want. Care to show some code?

Cheers

robert

···

On Tue, Apr 5, 2011 at 11:30 AM, Leo M. <leo.mmcm@gmail.com> wrote:

I've got this problem:

I've a range from 1..87.

I've got how to print 87 lines.

I'm trying to make 87 different objects, since if i try to push this
result into an array, the array.size is always 1. How could I have 87
different objects to push in an array?

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Hi Leo.

···

On Tue, Apr 5, 2011 at 6:30 PM, Leo M. <leo.mmcm@gmail.com> wrote:

I'm trying to make 87 different objects, since if i try to push this
result into an array, the array.size is always 1. How could I have 87
different objects to push in an array?

I might misunderstand what you want to do, but how about this?

Array.new(87) { "" } # => ["", "", ...(87 times)]

If you want to set length of the array according to some variable.

Array.new(some_variable) { "" }

Each element of array is different.

--
Haruka YAGNI

I'm trying to make 87 different objects, since if i try to push this
result into an array, the array.size is always 1.

check the doc.
eg, try

   $ ri Array#"<<"

How could I have 87
different objects to push in an array?

many ways.
eg,

a=
#=>
87.times{a<<Object.new}
#=> 87
a.size
#=> 87
a.first(5)
#=> [#<Object:0x937c16c>, #<Object:0x937c158>, #<Object:0x937c144>,
#<Object:0x937c130>, #<Object:0x937c11c>]

best regards -botp

···

On Tue, Apr 5, 2011 at 5:30 PM, Leo M. <leo.mmcm@gmail.com> wrote:

Sorry for being imprecise.

The matter is this : I have 87 files named black1, black2 ...... black
87.

I want ruby to print each file with the entire path, so, this is what
I've written :

i = 1..87

array = []

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

array.push e

puts array.size # => 1

ruby actually prints correctly each line, but as a single array object.

I need that each line, each path printed is a single array object, so
that in the end I'll have an array of 87 as size with :

"/R/blackout/black1"
"/R/blackout/black2"
...
"/R/blackout/black87"

I also tried the .chomp method but is pretty much the same :-\

···

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

It works! Thanks everybody :slight_smile:

···

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

Sorry for being imprecise.

The matter is this : I have 87 files named black1, black2 ...... black
87.

I want ruby to print each file with the entire path, so, this is what
I've written :

i = 1..87

array =

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

e at this point is an array

array.push e

You have pushed an array (e) to be the first element of the array (array).

puts array.size # => 1

So this is correct. You might want to try

i = 1..87

array = i.map {|i| "/R/blackout/black"+i.to_s}

puts array.size # => 87

···

On 5 April 2011 11:38, Leo M. <leo.mmcm@gmail.com> wrote:

ruby actually prints correctly each line, but as a single array object.

I need that each line, each path printed is a single array object, so
that in the end I'll have an array of 87 as size with :

"/R/blackout/black1"
"/R/blackout/black2"
...
"/R/blackout/black87"

I also tried the .chomp method but is pretty much the same :-\

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

Sorry for being imprecise.

The matter is this : I have 87 files named black1, black2 ...... black
87.

I want ruby to print each file with the entire path, so, this is what
I've written :

i = 1..87

array =

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

Here, you are sending the path to standard output (that's what puts does,
that's what it means to print data). But you are more interested in using
the result that you are calculating rather than printing it. So you want
something that will collect those values into an array:

e = i.collect { |i| "/R/blackout/black"+i.to_s+"\n" }

(collect is another name for map)

alternatively, you could iterate over each element and add it to the array

i.each { |i| array << "/R/blackout/black"+i.to_s+"\n" }

Some quick advice, you probably don't want a newline in your filename, so
"/R/blackout/black"+i.to_s+"\n"
should probably be
"/R/blackout/black"+i.to_s

And it is also more common to use interpolation, because it looks nicer
(IMO), is more efficient, and requires fewer characters. It's also easier
for my brain to comprehend at a glance:
"/R/blackout/black#{i}"

array.push e

puts array.size # => 1

Something that might be helpful is the p method.

p prints out an inspected version of your object

i = 1..87

# I'll omit the output of the puts statements
e = i.each { |i| puts "/R/blackout/black#{i}" }

p e
# >> 1..87

Here, we can see that #each returns the object it was iterating over, the
range from 1 to 87, not the new array, and certainly not what we sent to
stdout.

···

On Tue, Apr 5, 2011 at 5:38 AM, Leo M. <leo.mmcm@gmail.com> wrote:

Why not use Dir#glob([pattern])?

That automatically creates an array with the files and their paths
that match [pattern].

···

On Tue, Apr 5, 2011 at 12:38 PM, Leo M. <leo.mmcm@gmail.com> wrote:

Sorry for being imprecise.

The matter is this : I have 87 files named black1, black2 ...... black
87.

I want ruby to print each file with the entire path, so, this is what
I've written :

--
Phillip Gawlowski

Though the folk I have met,
(Ah, how soon!) they forget
When I've moved on to some other place,
There may be one or two,
When I've played and passed through,
Who'll remember my song or my face.

Sorry for being imprecise.

The matter is this : I have 87 files named black1, black2 ...... black
87.

I want ruby to print each file with the entire path, so, this is what
I've written :

i = 1..87

array =

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

e at this point is an array

No, it's a Range.

irb(main):001:0> (1..87).each {}
=> 1..87
irb(main):002:0> (1..87).each {}.class
=> Range

array.push e

You have pushed an array (e) to be the first element of the array (array).

He has pushed a Range into the Array.

puts array.size # => 1

So this is correct. You might want to try

i = 1..87

array = i.map {|i| "/R/blackout/black"+i.to_s}

puts array.size # => 87

If it is just for printing I'd rather

(1..87).each {|i| puts "/R/blackout/black#{i}"}
1.upto(87) {|i| puts "/R/blackout/black#{i}"}

Cheers

robert

···

On Tue, Apr 5, 2011 at 12:59 PM, Peter Hickman <peterhickman386@googlemail.com> wrote:

On 5 April 2011 11:38, Leo M. <leo.mmcm@gmail.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Thank you for your correction.

···

On 5 April 2011 13:54, Robert Klemme <shortcutter@googlemail.com> wrote:

On Tue, Apr 5, 2011 at 12:59 PM, Peter Hickman

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

e at this point is an array

Ah bugger, got my cut and paste all wrong.

Thank you, Robert Klemme, for pointing out that it was a range that
was being pushed an not an array as I stated.

···

On 5 April 2011 14:28, Peter Hickman <peterhickman386@googlemail.com> wrote:

On 5 April 2011 13:54, Robert Klemme <shortcutter@googlemail.com> wrote:

On Tue, Apr 5, 2011 at 12:59 PM, Peter Hickman

e = i.each {|i| puts ("/R/blackout/black"+i.to_s+"\n")}

e at this point is an array

Thank you for your correction.