2016-01-19 5 views
0

У меня есть программа, которую я делаю, которая собирается распаковывать электронные таблицы из большого tarball. Он будет делать это, будучи предоставленным числом до ARGV[0], после чего он будет запускаться через список текстовых файлов, которые соответствуют ранее указанному большому tarball, как только он найдет текстовый файл, он может найти правильный tarball для извлечения из ...ARGV всегда с ошибкой по регулярному выражению

Однако, у меня есть это установить, где он должен проверить номера, данные, хотя ARGV, прежде чем он будет работать поиск с помощью этого: /^\d{4,7}/ Проблема заключается в том, что он держит недобросовестный к этому: USAGE: unarchive_ss <folio number>

Я немного смущен, почему он это сделает? Может ли кто-нибудь объяснить мне, что здесь происходит? ..

Я также попытался:

  • /\A\d{7}\z/
  • /\d{7}/

Источник:

#!/usr/local/bin/ruby 

require 'rubygems/package' 
require 'fileutils' 
require 'zlib' 

class ArchiveManager 

    attr_accessor :folio_num 

    def initialize(folio_num) 
    @folio_num = folio_num 
    end 

    def num_check 
    if folio_num =~ /^\d{4,7}/ 
     search_for_spreadsheet 
    else 
     puts <<-EOF 

     USAGE: unarchive_ss <folio number> 

     EOF 
    end 
    end 

    def search_for_spreadsheet 
    location = FileUtils.chdir("path/to/file") 
    location 
    digits = `grep -lr #{folio_num}.ods *.txt` 
    file_name = digits.match(/\d+/).to_s 
    puts file_name 
    end 
end 
#/2715015 
test = ArchiveManager.new(ARGV[0]) 
test.num_check 

Пример:

[]$ ruby unarchive_ss 2715015 

     USAGE: unarchive_ss <folio number> 

[]$ 
[]$ ruby unarchive_ss 271501 

     USAGE: unarchive_ss <folio number> 

[]$ 
[]$ ruby unarchive_ss 1111111 

     USAGE: unarchive_ss <folio number> 

[]$ ruby unarchive_ss 111  

     USAGE: unarchive_ss <folio number> 

[]$ 
+1

Вы пытались использовать Rubular? – 13aal

+0

@ Ekult3k Да, вот где я получил три 'регулярных выражения'. – Bam

+2

Я не могу воспроизвести это. Ваш код работает на моей машине. –

ответ

1

Одна потенциальная проблема заключается в регулярном выражении в num_check:

if folio_num =~ /^\d{4,7}/ 

тестирования, что шаблон показывает отверстие:

'123'[/^\d{4,7}/]  # => nil 
'1234'[/^\d{4,7}/]  # => "1234" 
'1234567'[/^\d{4,7}/] # => "1234567" 
'12345678'[/^\d{4,7}/] # => "1234567" 

Вы получите «истинный» для любого числа больше, чем вы ожидаете ,

Простое исправление:

'12345678'[/^\d{4,7}$/] # => nil 

Просто добавьте $, чтобы поймать конец линии.