On Thu, Dec 18, 2008 at 1:12 PM, Stuart Clarke
<stuart.clarke1986 / gmail.com> wrote:
> Sorry I was getting to replying to you then got called off in a hurry. I
> do not understand some of the code you have used as I am relatively new
> to Ruby. Can you briefly outline the code, it would be greatly
> appreciated.

> Robert Klemme wrote earlier:
> A framework:
>
> Data = Struct.new :a, :b:, :c, :d, :e, :f
(leave off the extra : after b  :-)

Struct is an automatic way to define a simple class.  There, he's
defining the structure of a class that he wants to call Data with the
use of Struct.  So with this statement, we will have a class that has
attributes a, b, c, d, e, f, all with getters and setters, and (at
least in 1.8.7 AFAIK) an initialize method.  For example...

MySimpleClass = Struct.new :instance_var
m = MySimpleClass.new "hi"
puts m.instance_var
m.instance_var = "bye"
puts m.instance_var
#hi
#bye

>
> def Data.parse(line)
>   d = new(*line.strip.split(/\s+/))
>   d.f = Integer(d.f)
>   d
> end

There he is defining a class method called parse on the class Data.
This method returns a Data object filled with the info that was in the
string "line".

>
> count = Hash.new 0

As explained, that was a Hash initialization with a default value of 0

>
> ARGF.each do |line|
>   data = Data.parse(line)
>   count[data.f[/Name:\t(.+?)\r\n/, 1]] += 1 if data.a == 100
> end

Rack up the count if the conditions are met

>
> count.each do |a, cnt|
>   printf "%20s %6d\n", a, cnt
> end

Print the darn thing out!

hth,
Todd