Well, it's now two days into playing with Ruby, and I wrote my first
non-trivial program (it's converting a large c++ enum to constants). I'm
still shaky on idiomatic usage, so if any of the initiated would care to
comment on coding style I would be very grateful.
-- bjorn
# small class to take a list of lists of strings
# and output them in nicely adjusted columns
class StringTable
def initialize(table)
@table = table
@ncols = table[0].length
@maxcols = [].fill(0, 0...@ncols)
#create a vector of max lenghts of each column
@table.each {|row|
(0...row.length).each {|i|
@maxcols[i] = [row[i].length, @maxcols[i]].max
}
}
end
def output
# create the format specifier
fmt = ''
(0... / maxcols.length).each {|n|
fmt += "%-#{@maxcols[n]+1}s"
}
fmt += "\n"
@table.each {|row|
printf(fmt, *row)
}
end
end
def test
lst = []
IO.foreach('geneid.in') {|line|
if line =~ /\s*(\w+)\s*=\s*(\d+)/
lst << ['const long', $1, '=', $2+';']
end
}
st = StringTable.new(lst)
st.output
end
test