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.


    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 ="#{ARGV[0]}")

    disk_usage_info = `du #{specified_directory} -a`

    file_size =

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


    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

    puts file



    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.


    Leslie Cain, Oct 11, 2008
    1. Advertisements

  2. First, you might be overdoing the directory part. You may want to
    simply test[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


    Rob Biedenharn
    Rob Biedenharn, Oct 11, 2008
    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.