Tom Cloyd
6/16/2008 6:53:00 AM
David A. Black wrote:
> Hi --
>
> On Mon, 16 Jun 2008, Tom Cloyd wrote:
>
>> I know this is a simple problem - to 'most everyone but me, but I
>> cannot see why I'm getting this error. I've explored things with
>> ruby-debug, and with irb inside of the debugger, and I simply cannot
>> replicate the error.
>>
>> The code (this most of a little routine for converting an HTML file
>> to a textile marked up file):
>>
>> # input
>> filein = open( "{whatever}" )
>> fi = filein.readlines
>> # output
>> fileout = open( "_textile.txt", 'w')
>> delta = [
>> ["</p>", ''],
>> ["</h1>", '']] # for brevity, I've truncated this array - you get
>> the idea, I assume
>> ld = delta.length
>> i = 0 until i > ld
>> #results = fi[0].gsub( delta[i][0], delta[i][1] ) <= in an attempt
>> isolate error, I broke this into the following:
>> s1 = delta[i][0] # <= exception is thrown here
>> s2 = delta[i][1]
>> results = fi[0].gsub( s1, s2 )
>> i += 1
>> end
>>
>> The error msg:
>>
>> $ ruby textilemkr.rb
>> textilemkr.rb:55:in `main': undefined method `[]' for nil:NilClass
>> (NoMethodError)
>> from textilemkr.rb:66
>>
>> I've confirmed that delta[1][0] is valid, that "i" is 0 when error
>> occurs, etc.
>>
>> If it works in irb, why doesn't it work when I run the routine via
>> the interpreter? What obvious thing am I missing?
>
> It doesn't work in irb:
>
>>> delta = [
> ?> ["</p>", ''],
> ?> ["</h1>", '']] # => [["</p>", ""], ["</h1>", ""]]
>>> ld = delta.length
> => 2
>>> i = 0
> => 0
>>> until i > ld
>>> s1 = delta[i][0] # <= exception is thrown here
>>> s2 = delta[i][1]
>>> i += 1
>>> end
> NoMethodError: undefined method `[]' for nil:NilClass
>
> The problem is that the length of the array is 2, but delta[2] is nil.
> I'm reasonably sure that that's when it's failing, not when i is 0,
> unless the shortened version is missing something that would make that
> happen.
>
> I would dispense with i entirely and just iterate over delta.
>
>
> David
>
Nice. Thanks much, on both points. I never "saw" i get to 2, and so
didn't see the error. Jeez. I do find it hard to be a weekend warrior
with Ruby. I lose bits between my ears during the workweek!
Thanks again for you help.
t.
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~