Adam Shelly
12/7/2007 10:46:00 PM
On 12/7/07, Jon Handler <jhandler@shopping.com> wrote:
> Adam Shelly wrote:
> > On 12/7/07, Jon Handler <jhandler@shopping.com> wrote:
> >> I need to advance to the next line of the file within the loop but I
> >> can't for the life of me figure out how to do that. This can't be hard,
> >> but it's defeated me so far!
> >>
> > That's the cool thing about 'each' - you don't have to do anything
> > else. The code inside the do-end block will be called for each line,
> > with l set to that line.
> I wasn't clear about this... my problem is that I want to do something
> different depending on which line I'm looking at. Here's some psuedo
> code:
>
> for the whole file
> read one line with the identifying string
> read one line with the count of items
> for each item
> read one line with the data
> end
> save the whole record as an object indexed by the identifying string
> end
>
> The problem is that this is not a line-oriented set of data. So I have
> to have some kind of nested loop that advances the line counter. Or,
> there has to be some record-oriented I/O that lets me process the file
> as a set of records. Surely there's some cool, ruby way to do this?!??
>
I see - i misunderstood your question.
I don't know about cool & rubyish, but I'd skip the each and do
something like this:
dataset={}
File.open("myfile.txt", 'r') do |f|
while (!f.eof)
name = f.gets.chomp
data=[]
f.gets.to_i.times {
data << f.gets.chomp.split(",")
}
dataset[name] = data
end
end
p dataset
That assumes that record is comma separated and can be stored as a
simple array. For a more complicated record, use something like
data << MyRecord.new(f.gets.chomp)
Hope this helps,
-Adam