Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Needing a little help with a ruby program
spudicus87
10/11/2008 7:03:00 PM
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-...
.
1 Answer
Rob Biedenharn
10/11/2008 8:07:00 PM
0
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
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://agileconsult...
Rob@AgileConsultingLLC.com
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Needing a little help with a ruby program
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password