Needing a little help with a ruby program

Discussion in 'Ruby' started by Leslie Cain, Oct 11, 2008.

  1. Leslie Cain

    Leslie Cain Guest

    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
     
    Leslie Cain, Oct 11, 2008
    #1
    1. Advertisements


  2. 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 Biedenharn, Oct 11, 2008
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.