On Wed, 2006-05-03 at 21:21 +0900, jan aerts (RI) wrote:
> Hi Peter,
> 
> I think it has to do with the fact that numberofpages is a string
> instead of an integer. In the irb:
> > number_of_pages = 5
> > number_of_pages % 2     => 1
> > number_of_pages = '5'
> > number_of_pages % 2     => 5
> 
> So the test (numberofpages % 2 != 0) will always return a false, unless
> numberofpages was 0 in the first place.
> 

Yes, String#% does something completely different:

# => "16768.181"
"%.3f" % 16768.181202317
# => "16768.181"
"%d" % 502
# => "502"
"An example of %s with %s" % ["formatting", "String#%"]
# => "An example of formatting with String#%"

ri 'String#%'
--------------------------------------------------------------- String#%
     str % arg   => new_str
------------------------------------------------------------------------
     Format---Uses _str_ as a format specification, and returns the
     result of applying it to _arg_. [...snipped...]


(P.s. seems to be a lot of top-posting going on these days :( )



> Workaround: use ( numberofpages.to_i % 2 ) instead.
> 
> Jan.
> 
> -----Original Message-----
> From: list-bounce / example.com [mailto:list-bounce / example.com] On Behalf
> Of Peter Bailey
> Sent: 03 May 2006 13:14
> To: ruby-talk ML
> Subject: Problem with MODULO function?
> 
> The results of my little script here confuse me. I looking for an odd 
> number of pages in postscript files. When it's an odd number, I add a 
> blank, to make an even page count. In my test here, I've got 2 test 
> postscript files. One has 11 pages; the other has 42 pages. As can be 
> seen by my results below this script, it's seeing both as odd numbered, 
> and, it's adding a blank to each. Is my formula for MOD not correct? 
> I've tried it with "not equal to zero," like here, and, I've tried it 
> with "equal to one," with the same results.
> 
> Dir.chdir('c:/scripts/ruby/temp')
> psfiles = Dir.glob('*.ps')
> psfiles.each do |psfile|
>   File.open(psfile, "a") do |writepage|
>   	File.read(psfile).scan(/\%\%Pages: (\d{1,5})\n/) do
>   	  numberofpages = $1
>     	#Diagnostic to see the page counts of each file.
>     	puts numberofpages
>     	#If the page count is odd, then,
>           #add a blank to make it an even page count.
>     	if (numberofpages % 2) !=0 then
>       	#Diagnostic--what is it seeing?
>       	puts "odd number of pages"
>       	writepage << "showpage\n"
>     	end
>   	end
>   end
> end
> 
> 
> C:\scripts\RUBY\temp>c:\scripts\ruby\images\test4.rb
> 42
> odd number of pages
> 11
> odd number of pages
> 
> Thank you, anyone, who can help me with this. . . .
> 
-- 
Ross Bamford - rosco / roscopeco.REMOVE.co.uk