[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Using two justifications on the same line.

Shiloh Madsen

11/20/2006 11:08:00 PM

Ok, so the chapter I am working on now is asking for me to write a
table of contents with the title left justified and the pages right
justified. I did this much earlier in the book with individual lines,
and it came out fine. The code I used initially was :

line_width = 60
puts ("Chapter 1: Getting Started".ljust(line_width/2) + "page
1".rjust(line_width/2))
puts ("Chapter 2: Numbers".ljust(line_width/2) + "page 9".rjust(line_width/2))
puts ("Chapter 3: Letters".ljust(line_width/2) + "page 13".rjust(line_width/2))

The chapter I am reading now is about arrays, so I am supposed to load
the same data into an array and accomplish the same task. What Ive
tried is several variations on this:

chapters = ['Chapter 1: Getting started','Chapter 2: Numbers',
'Chapter 3: Letters']
pages = ['page 1','page 9', 'page 13']
line_width = 60
puts (chapters.ljust(line_width/2) + pages.rjust(line_width/2))

...with the last line having changed a number of times. Obviously, I
haven't been able to get the code to run right. Could anyone tell me
what I am missing?

Shiloh

6 Answers

William James

11/21/2006 12:40:00 AM

0


Shiloh Madsen wrote:
> Ok, so the chapter I am working on now is asking for me to write a
> table of contents with the title left justified and the pages right
> justified. I did this much earlier in the book with individual lines,
> and it came out fine. The code I used initially was :
>
> line_width = 60
> puts ("Chapter 1: Getting Started".ljust(line_width/2) + "page
> 1".rjust(line_width/2))
> puts ("Chapter 2: Numbers".ljust(line_width/2) + "page 9".rjust(line_width/2))
> puts ("Chapter 3: Letters".ljust(line_width/2) + "page 13".rjust(line_width/2))
>
> The chapter I am reading now is about arrays, so I am supposed to load
> the same data into an array and accomplish the same task. What Ive
> tried is several variations on this:
>
> chapters = ['Chapter 1: Getting started','Chapter 2: Numbers',
> 'Chapter 3: Letters']
> pages = ['page 1','page 9', 'page 13']
> line_width = 60
> puts (chapters.ljust(line_width/2) + pages.rjust(line_width/2))
>
> ..with the last line having changed a number of times. Obviously, I
> haven't been able to get the code to run right. Could anyone tell me
> what I am missing?
>
> Shiloh

chapters = ['Chapter 1: Getting started', 'Chapter 2: Numbers',
'Chapter 3: Letters']
pages = 'page 1', 'page 9', 'page 13'
line_width = 60
puts chapters.zip( pages ).map{|chapter,page|
chapter.ljust(line_width/2) + page.rjust(line_width/2) }

Morton Goldberg

11/21/2006 5:04:00 AM

0


On Nov 20, 2006, at 6:07 PM, Shiloh Madsen wrote:

> Ok, so the chapter I am working on now is asking for me to write a
> table of contents with the title left justified and the pages right
> justified. I did this much earlier in the book with individual lines,
> and it came out fine. The code I used initially was :
>
> line_width = 60
> puts ("Chapter 1: Getting Started".ljust(line_width/2) + "page
> 1".rjust(line_width/2))
> puts ("Chapter 2: Numbers".ljust(line_width/2) + "page 9".rjust
> (line_width/2))
> puts ("Chapter 3: Letters".ljust(line_width/2) + "page 13".rjust
> (line_width/2))
>
> The chapter I am reading now is about arrays, so I am supposed to load
> the same data into an array and accomplish the same task. What Ive
> tried is several variations on this:
>
> chapters = ['Chapter 1: Getting started','Chapter 2: Numbers',
> 'Chapter 3: Letters']
> pages = ['page 1','page 9', 'page 13']
> line_width = 60
> puts (chapters.ljust(line_width/2) + pages.rjust(line_width/2))
>
> ...with the last line having changed a number of times. Obviously, I
> haven't been able to get the code to run right. Could anyone tell me
> what I am missing?
The problem is that an array doesn't respond to either ljust or
rjust. You need to extract the strings from their containing arrays.
Also, it's easier to use one array than two, so I recommend something
like:

source = [
'Chapter 1: Getting started',
'page 1',
'Chapter 2: Numbers',
'page 9',
'Chapter 3: Letters',
'page 13'
]
line_width = 60
until source.empty?
chapter = source.shift
page = source.shift
puts chapter.ljust(line_width/2) + page.rjust(line_width/2)
end

Regards, Morton



Shiloh Madsen

11/21/2006 12:00:00 PM

0

Ok, I think i understand that...however the shift function hasn't been
introduced yet. Is there another way that i COULD do it?


On 11/20/06, Morton Goldberg <m_goldberg@ameritech.net> wrote:
>
> On Nov 20, 2006, at 6:07 PM, Shiloh Madsen wrote:
>
> > Ok, so the chapter I am working on now is asking for me to write a
> > table of contents with the title left justified and the pages right
> > justified. I did this much earlier in the book with individual lines,
> > and it came out fine. The code I used initially was :
> >
> > line_width = 60
> > puts ("Chapter 1: Getting Started".ljust(line_width/2) + "page
> > 1".rjust(line_width/2))
> > puts ("Chapter 2: Numbers".ljust(line_width/2) + "page 9".rjust
> > (line_width/2))
> > puts ("Chapter 3: Letters".ljust(line_width/2) + "page 13".rjust
> > (line_width/2))
> >
> > The chapter I am reading now is about arrays, so I am supposed to load
> > the same data into an array and accomplish the same task. What Ive
> > tried is several variations on this:
> >
> > chapters = ['Chapter 1: Getting started','Chapter 2: Numbers',
> > 'Chapter 3: Letters']
> > pages = ['page 1','page 9', 'page 13']
> > line_width = 60
> > puts (chapters.ljust(line_width/2) + pages.rjust(line_width/2))
> >
> > ...with the last line having changed a number of times. Obviously, I
> > haven't been able to get the code to run right. Could anyone tell me
> > what I am missing?>
> The problem is that an array doesn't respond to either ljust or
> rjust. You need to extract the strings from their containing arrays.
> Also, it's easier to use one array than two, so I recommend something
> like:
>
> source = [
> 'Chapter 1: Getting started',
> 'page 1',
> 'Chapter 2: Numbers',
> 'page 9',
> 'Chapter 3: Letters',
> 'page 13'
> ]
> line_width = 60
> until source.empty?
> chapter = source.shift
> page = source.shift
> puts chapter.ljust(line_width/2) + page.rjust(line_width/2)
> end
>
> Regards, Morton
>
>
>
>

Martin DeMello

11/21/2006 12:07:00 PM

0

On 11/21/06, Shiloh Madsen <shiloh.madsen@gmail.com> wrote:
> Ok, I think i understand that...however the shift function hasn't been
> introduced yet. Is there another way that i COULD do it?

If you know the chapters and pages arrays are well-formed (that is,
they are the same size, and each page corresponds to the chapter in
the same position) you could do this:

chapters.each_with_index {|chapter, index|
page = pages[index]
....
}

martin

Paul Lutus

11/21/2006 9:37:00 PM

0

Shiloh Madsen wrote:

/ ...

> ..with the last line having changed a number of times. Obviously, I
> haven't been able to get the code to run right. Could anyone tell me
> what I am missing?

------------------------------------------
#!/usr/bin/ruby -w

chapter_list = [
"Getting Started|1",
"Numbers|9",
"Letters|13"
]

cn = 1

line_width = 60

lwd2 = line_width/2

chapter_list.each do |item|
chapter_name,page_number = item.split("|")
puts "Chapter #{cn}: #{chapter_name}".ljust(lwd2) +
"#{page_number}".rjust(lwd2)
cn += 1
end
------------------------------------------


Output:

Chapter 1: Getting Started 1
Chapter 2: Numbers 9
Chapter 3: Letters 13

--
Paul Lutus
http://www.ara...

Morton Goldberg

11/21/2006 11:52:00 PM

0

On Nov 21, 2006, at 7:00 AM, Shiloh Madsen wrote:

> Ok, I think i understand that...however the shift function hasn't been
> introduced yet. Is there another way that i COULD do it?

Sure. In Ruby there are always many ways to achieve a goal. How about
this?

source = [
'Chapter 1: Getting started',
'page 1',
'Chapter 2: Numbers',
'page 9',
'Chapter 3: Letters',
'page 13'
]
line_width = 60
i = 0
while i < source.length
chapter = source[i]
page = source[i+1]
puts chapter.ljust(line_width/2) + page.rjust(line_width/2)
i += 2
end

Regards, Morton