2

コマンドラインから入力したディレクトリに特定のファイル拡張子のファイルが含まれているかどうかを確認しようとしています。たとえば、フォルダ「Folder1」に別のフォルダ「Folder2」があり、Folder2に複数のファイル「test.asm」、「test.vm」、「test.tst」が含まれているとします。このようなコマンドラインからディレクトリまたはファイルを取得しています

ruby translator.rb Folder1/Folder2

また

ruby translator.rb Folder1/Folder2/test.vm

私がやろうとしているのはエラーチェックです。入力がフォルダであるかどうかをすでに確認しているので、フォルダに実際に.vmファイルが含まれているかどうかを確認する必要があります。私がこれまでに行ったことはこれです:

require 'pathname'

pn = Pathname.new(ARGV[0])

if ARGV.size != 1
    puts "Proper usage is: ruby vmtranslator.rb file_directory\file.vm \nOR \nruby vmtranslator.rb file_directory\ where file_directory has multiple vm files test".split("\n")
elsif !pn.exist? && !pn.directory?
    puts "Something is wrong with the file"
    puts "Either try another file or check the file extension"
elsif pn.directory? && pn.children(false).extname.include?('.vm')
    puts "this should print if Folder1 is the folder, but not if Folder2 is.."
    vm_file1 = File.open("OPEN FILES WITH .vm AS EXTENSION)
elsif pn.exist? || pn.file?
    puts "this is right"
    vm_file = File.open(ARGV[0], "r")
    asm_file = File.new(ARGV[0].sub('.vm', '.asm'), "w")
end

したがって、最初に引数が1つしかないかどうかを確認し、引数が1つしかない場合は、ファイルかディレクトリかを確認します。それ以外の場合はエラーを出力します。次に、ディレクトリかどうかを確認します。その場合、ディレクトリに実際に.vmファイルが含まれているかどうかを確認する必要があります。試しpn.each_child {|f| f.extname == '.vm'}ましたが、trueを返す前に最初の値をチェックするだけです。ブール値を設定する以外に、trueを返す前に配列全体をチェックする簡単な方法はありますか?

そこにあるコードのいくつかは完了していません。特定の拡張子のファイルについてディレクトリをチェックする方法があるかどうかを尋ねているだけです。これまでの検索では何も見つかりません。

4

3 に答える 3

4
str = ARGV[0]

proc = ->(f) { puts "doing something with #{f.path}" }

if Dir.exists?(str)
  Dir.glob(File.join(str, File.join('**', '*.vm'))).each do |entry|
    proc[File.open(entry)]
  end
elsif File.exists?(str) && File.extname(str) == '.vm'
  proc[File.open(str)]
else
  puts "couldn't do anything with #{str}"
end
于 2012-10-18T03:36:08.387 に答える
1
Dir["Folder1/Folder2/*.vm"].empty?

にファイルfalseがある場合は戻ります。.vmFolder1/Folder2

于 2012-10-18T02:36:53.483 に答える
1
require 'pathname'

def directory_has_vm_files?(path)
  Dir.glob(path.join('*.vm')).size > 0
end

unless ARGV[0]
  puts %{
    Proper usage is:

    ruby vmtranslator.rb file_directory or file.vm

    OR

    ruby vmtranslator.rb file_directory
    where file_directory has multiple vm files
  }
else
  path = Pathname.new(ARGV[0])

  if path.exist?
    if path.file?
      if File.extname(path) == '.vm'
        puts "Valid VM file"
      else
        puts "Not a VM file"
      end
    else
      if directory_has_vm_files?(path)
        puts "Valid Directory - contains vm files"
      else
        puts "#{path} does not contain any VM file"
      end
    end
  else
    puts "Invalid path"
  end
end
于 2012-10-18T03:13:20.260 に答える