From: RichardOnRails Date: 2011-01-17T14:05:19+09:00 Subject: Re: Problem populating a hash with regex results On Jan 16, 11:37 pm, RichardOnRails wrote: > On Jan 16, 7:06 pm, Josh Cheek wrote: > > > > > [Note:  parts of this message were removed to make it a legal post.] > > > On Sun, Jan 16, 2011 at 5:45 PM, RichardOnRails < > > > RichardDummyMailbox58...@uscomputergurus.com> wrote: > > > Hi, > > > > I've got a text file with 7 fields.  I successfully extract the data > > > 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.  In the mean time,  mainly > > > 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, you are > > 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 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 Hey Josh, Please forget about this last question. It is garbled. I'm posting it anew. Thanks, Richard