一直致力于学校的课程,需要帮助才能获得一些作品。
目标是获取任何目录的命令行参数,并显示有关具有扩展名的每个文件的一些信息。我主要使用它,但需要一些额外的帮助。
该文件只需要更多内容:
目前,它确实从目录中获取文件,显示扩展名,并输出文件的大小。这是我到目前为止编写的代码:
directory=ARGV[0]
searchstring= Regexp.new "(\\.[^.]+)$"
if File.exists? File.expand_path(directory)
Dir["#{File.expand_path(directory)}/*"].each.map { |f| File.basename(f)
if File.basename(f)=~searchstring
puts "Extension: #{File.extname(f)} Count: Size: #{File.stat(f).size}"
end
}
else
puts "This directory does not exist"
end
到目前为止输出如下:
Extension: .rb Count: Size: 104
Extension: .rb Count: Size: 381
Extension: .xml Count: Size: 84252
Extension: .rb Count: Size: 107
Extension: .rb Count: Size: 377
Extension: .sql Count: Size: 1763
Extension: .rb Count: Size: 123
Extension: .rb Count: Size: 189
Extension: .db Count: Size: 10240
Extension: .rb Count: Size: 791
编辑:我检查目录是否存在。我将粘贴上面的新代码。但仍然需要帮助其他事情。特别是将扩展名存储为一个组(哈希?)。
答案 0 :(得分:2)
关于你的第二个问题:ARGV[0] || Dir.pwd
应该做的伎俩或File.dirname(__FILE__)
我想你想要在该文件夹中使用每个扩展的计数和大小的扩展哈希值,这应该是这样的
directory = ARGV[0] || Dir.pwd
searchstring = Regexp.new "(\\.[^.]+)$"
extensions = Hash.new {|hash, key| hash[key] = {size: 0, count: 0}}
if File.exists? File.expand_path(directory)
Dir["#{File.expand_path(directory)}/*"].each.map do |f|
if File.basename(f) =~ searchstring
extensions[File.extname(f)][:size] += File.stat(f).size
extensions[File.extname(f)][:count] += 1
end
end
else
puts "This directory does not exist"
end
p extensions
如果您想知道Hash.new {|hash, key| hash[key] = {size: 0, count: 0}}
的含义:
您为散列extensions
分配一个默认值,这是一个默认内容为{hash:0,count:0}的哈希值
您需要将大小和计数设置为0而不是nil,因为您在其上执行了+=
并且这在nil上是不可能的