From: Samantha Date: 2007-03-08T01:32:23+09:00 Subject: Re: Can someone point me in the right direction? Pipe Delimited Files & Hashes... Robert Klemme wrote: > On 07.03.2007 16:33, Samantha wrote: >> Hello all, >> >> I have a file that is not a normal csv or tab delimited file. It is >> delimited with the pipe | character. >> >> I Googled and found someone had posted how to parse it... That's all >> fine and well, but now I need to figure out how I'm going to either >> (a) import it into a MySQL database or (b) put it in some sort of >> container that will let me access each field (like an array or a hash). >> >> If I go through the hash, I'll probably need to assign each field in >> the file a key, and then populate it. I'm having a hard time >> figuring this out. >> >> If I go the route of MySQL I know that I'll probably end up using >> ActiveRecord. >> >> >> This is what I have so far that I found from someone's blog (I got >> the concept from someone's blog and then modified it a bit to see >> what it was doing and what it would do in relation to my file. What >> this does, obviously, is puts out the info, a new line between each >> field, and an extra linefeed between each row... (each group - boy, >> am I articulate today or WHAT?!) >> >> File.open("i put the filename here").each do |record| >> record.split("|").each do |field| >> field.chomp! >> puts field >> end >> end >> >> >> So, what I want it to do, is say I have the following fields in the | >> delimited file: >> >> category | subcategory | description >> >> How do I make that stuff into a hash? I should probably start out >> small by putting it into a hash first, and then figure out how to >> deal with it in MySQL. >> >> If someone could point me in the right direction, of possible >> libraries that would help or the such, I'd love to go read there and >> study on it and try to figure it out. Not asking for answers, just >> asking for resources. :) > > You pretty much got it already. Just add this: > > FIELDS = [:category, :subcategory, :description] > db = [] > > File.foreach("in") do |line| > line.chomp! > rec = {} > FIELDS.zip(line.split("|")) do |name, val| > rec[name]=val if val > end > db << rec > end > > # work with db > > (untested) > > Kind regards > > robert > > Thank you, Robert! I'm going to need to figure out what each thing does. :) I really want to make sure I grok everything. Again, thanks! -- Samantha http://www.babygeek.org/ "Beware when the great God lets loose a thinker on this planet. Then all things are at risk." --Ralph Waldo Emerson