从命令行参数

时间:2017-11-10 23:15:21

标签: ruby

一直致力于学校的课程,需要帮助才能获得一些作品。

目标是获取任何目录的命令行参数,并显示有关具有扩展名的每个文件的一些信息。我主要使用它,但需要一些额外的帮助。

该文件只需要更多内容:

  1. 对扩展程序进行分组并计算它们。
  2. 接受多个参数,如果没有给出,则默认为当前目录。
  3. 计算每个/显示总大小的数量/如果目录不存在或者我无法访问它,则会显示错误。
  4. 目前,它确实从目录中获取文件,显示扩展名,并输出文件的大小。这是我到目前为止编写的代码:

    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
    

    编辑:我检查目录是否存在。我将粘贴上面的新代码。但仍然需要帮助其他事情。特别是将扩展名存储为一个组(哈希?)。

1 个答案:

答案 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上是不可能的