From: Robert Klemme Date: 2004-04-23T16:09:04+09:00 Subject: Re: parsing memory specs "Robert Klemme" schrieb im Newsbeitrag news:c6ad9d$9q96m$1@ID-52924.news.uni-berlin.de... > > "Ara.T.Howard" schrieb im Newsbeitrag > news:Pine.LNX.4.44.0404222216280.8026-100000@fattire.ngdc.noaa.gov... > > > > i don't know how many times i've written this... > > > > spec = '2000GB' > > > > size = > > case spec > > when /gb\s*$/io > > spec.to_i * (2 ** 30) > > when /mb\s*$/io > > spec.to_i * (2 ** 20) > > when /kb\s*$/io > > spec.to_i * (2 ** 10) > > else > > spec.to_i > > end > > > > is there anything which parses memory specs anywhere in the stdlib? > > If not, why don't you put it into a file and store that in ~/lib/ruby? > > Btw. personally I would choose a different implementation. > > def parse_mem_size(spec) > m = /^(\d+) ?(?:([kmgt])b)?$/i.match( spec ) or > raise ArgumentError, "Illegal mem spec '#{spec}'" > > m[1].to_i * case m[2].downcase[0] > when ?k; 1024 > when ?m; 1048576 > when ?g; 1073741824 > when ?t; 1099511627776 > else 1 > end > end This should have read def parse_mem_size(spec) m = /^(\d+) ?(?:([kmgt])b)?$/i.match( spec ) or raise ArgumentError, "Illegal mem spec '#{spec}'" m[1].to_i * case m[2] && m[2].downcase[0] when ?k; 1024 when ?m; 1048576 when ?g; 1073741824 when ?t; 1099511627776 else 1 end end A solution involving a hash for the factors is probably even faster. Cheers robert