On Jan 16, 7:06   议 
> [Note:         
>
> On Sun, Jan 16, 2011 at 5:45 PM, RichardOnRails <
>
>
>
> RichardDummyMailbox58... / uscomputergurus.com> wrote:
> > Hi,
>
> > I've got a text file with 7 fields.    
> > on each with a regex and for debugging purposes print each lines
> > fields.
>
> > Now I want to edit and organize the data for subsequent processing.
> > But populating the hash fails. I posted the code on
> >http://www.pastie.org/1468271
>
> > The "puts" on line 15 shows that the regex captures the 7 fields in
> > the text file.
> > Lines 17-19 is an attempt to build a hash using the known values in
> > the $n variables.
> > That attempt fails because line 21 shows that it's nil instead the
> > string 100.0000 reported by line 15.
>
> > Maybe I should just build an array of the extracted values and use the
> > symbols I've created to index the array.    > > for my education, I'd like to know where I went wrong with this hash.
>
> > Thanks in Advance,
> > Richard
>
> Hi, Richard. It looks like your problem is that you put your data into your
> hash with `:n_shares=>$2`, on line 17, but you pull it out with `puts
> h[:shares]`, on line 21. When you get in weird situations like that, where
> it seems correct on one line, and incorrect just a few later, give yourself
> a sanity check by breaking it down into as small of steps as possible. I'd
> think "well, if it isn't in there, then wtf does my hash look like?" and
> instead of `puts h[:shares]` I'd stick a `p h` in there, which will print
> out an inspected version of the array. At that point, I'd see the data
> exists, and know the problem must be how I'm pulling it out.
>
> Also, I don't think `h.each_pair { |n,v| h[n] = v }` does anything, youre
> asking it for each key and value that it has, then telling it to set that
> key to that value. Well, if it gave you that pair, then it is already set.

Hi Josh,

Thanks for your reply.  I wrote that stupid stuff late last night and
didn't like what I was composing.  I wrote one approach for
initializing a hash and liked the result well enough, but didn't like
the copy & paste I did to create it.  (I do as much cut and paste as I
can 'cause I hate to feel like a clerk-typist.)

So I had two redundant thing coded.  And when I looked at it today,  I
forgot what I was doing, so I sent out my SOS.

> give yourself a sanity check by breaking it down into as small of steps as possible.

That's in keeping with Agile Programming's principle,  and I'm
striving to embrace that.  I'm gearing up to actually write my RSpec
stuff first before coding functionality.

> I'd think "well, if it isn't in there, then wtf does my hash look like?" and instead of
> `puts h[:shares]` I'd stick a `p h` in there.

That's a great point.  I should wean myself off writing so much code
to inspect my code's result and use Ruby's inspect in the form of the
'p' command.  Lesson learned, I hope.

This is my current idea for succinct code to support further data
analysis:

	field_names =%w<Name Shares Opened_MDY Closed_MDY Proceeds Cost
GainLoss>
	h = {}
	(1..field_names.size).each { |name| h[name] = eval($ + i.to_s) }

Of course, that doesn't work,  but despite my perusing of Pragmatic's
Programming Ruby, 2nd ed.,  I haven't so far figured out how to code
that third line.  Any ideas.  If you're too busy, or whatever,  don't
bother responding and I'll post about it tomorrow.

Many thanks for your thoughtful help.

Best wishes,
Richard