Needing a little help with a ruby program

Ok, so this is what I need to do for the program. I am not the best
programmer in the world and I need a little help.

Assignment:

Create a program that obtains disk usage information from du and uses
it to print a histogram of the disk usage of the directories given as
command line arguments. The histogram should consist of a string with
one hash mark per megabyte of disk usage.

This is what I have so far.

require 'fileutils'

specified_directory = Dir.new("#{ARGV[0]}")

disk_usage_info = `du #{specified_directory} -a`

file_size = Hash.new(0)

disk_usage_file.each_line do |file, size|
#Builds the hash with the filename and the sizes

end

file_size.each do|file, size|
       #changes value to histogram of numbers and shows results

       size = '#' * size / 1024

       if size < 0
         puts file +"\t | " + size

       else
         puts file

     end

   end

I think I have the first part and the last part down pretty well, I am
stuck on how to get the du output into the hash so I can output it
correctly. Any help would be appreciated.

Thanks,

Spudicus87

···

--
Posted via http://www.ruby-forum.com/.

First, you might be overdoing the directory part. You may want to simply test File.directory?(ARGV[0])

Look at each line in the du output. If it's anything like mine (MacOSX), you have a number, some spaces, and a filename. Presumably the filename could have embedded spaces so that may cause trouble if you aren't careful.

Here are some hints:

Regexp#match (or String#=~) to catch both pieces.

String#split on the spaces between the number and the filename using the optional second parameter to limit the number of parts.

String#to_i or Integer() to get an Integer from a string of digits

You might look at Kernel.sprintf or String#% to format at least the filename portion of the output.

You may not even need to put the data into a Hash (or Array or whatever) if you can process each line directly to the output that you want.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Oct 11, 2008, at 3:02 PM, Leslie Cain wrote:

Ok, so this is what I need to do for the program. I am not the best
programmer in the world and I need a little help.

Assignment:

Create a program that obtains disk usage information from du and uses
it to print a histogram of the disk usage of the directories given as
command line arguments. The histogram should consist of a string with
one hash mark per megabyte of disk usage.

This is what I have so far.

require 'fileutils'

specified_directory = Dir.new("#{ARGV[0]}")

disk_usage_info = `du #{specified_directory} -a`

file_size = Hash.new(0)

disk_usage_file.each_line do |file, size|
#Builds the hash with the filename and the sizes

end

file_size.each do|file, size|
      #changes value to histogram of numbers and shows results

      size = '#' * size / 1024

      if size < 0
        puts file +"\t | " + size

      else
        puts file

    end

  end

I think I have the first part and the last part down pretty well, I am
stuck on how to get the du output into the hash so I can output it
correctly. Any help would be appreciated.

Thanks,

Spudicus87