GetoptLong Accessing the values with out looping


#1

Simple question but for the life of me I can’t figure it out.
I am converting some of my basic perl scripts that I use daily as an
excersice in learning ruby.

I need to grab a date from the command line that will eventually be
converted into a filename.

no I want to call my script like such …
./myscript.rb -d 2006-08-06

I then want to validate what is being set in -d.
Here is the code I have that works but it just seems excessive to have
to
loop through the options…

def getopts
opts = GetoptLong.new([ ‘-d’, ‘–date’,
GetoptLong::REQUIRED_ARGUMENT])
opts.each do |opt,arg|
if opt =~ /-d|–date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
date = arg.gsub(’-’,’’)
return date
else
puts “Date needs to be set to YYYY-MM-DD using -d or --date”
exit
end
end
end

I thought I would just be able to do…
if opt[’-d’] =~ || opt[’–date’] =~

end

Thanks.
Paul Kraus


#2

On Tue, 16 May 2006, Paul D. Kraus wrote:

I then want to validate what is being set in -d.
puts “Date needs to be set to YYYY-MM-DD using -d or --date”
exit
end
end
end

I thought I would just be able to do…
if opt[’-d’] =~ || opt[’–date’] =~

end

it’s not that bad is it?

 harp:~ > cat a.rb
 require 'getoptlong'
 require 'time'

 def getdate
   gl = GetoptLong.new ['-d', '--date', 

GetoptLong::REQUIRED_ARGUMENT]
opts = {} and gl.each{|k,v| opts[k.delete(’-’)] = v}

   if((date = opts['d']))
     raise 'date needs to be set to YYYY-MM-DD using -d or --date' 

unless
date =~ %r/^ \d{4} - \d{2} - \d{2} $/iox
return Time.parse(date)
end
end

 p getdate


 harp:~ > ruby a.rb --date=2006-05-01
 Mon May 01 00:00:00 MDT 2006

regards.

-a


#3
   opts = {} and gl.each{|k,v| opts[k.delete('-')] = v}

Makes perfect sense in this example you are still looping through the
options.
All though this is better on the eyes.

I was hoping that the instance of getoptlong had some kind of method to
get
the value of one of the command line options.

Paul


#4

On May 16, 2006, at 8:22 AM, Paul D. Kraus wrote:

no I want to call my script like such …
./myscript.rb -d 2006-08-06

Have you tried CommandLine?

if opt =~ /-d|–date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
if opt[’-d’] =~ || opt[’–date’] =~

end

Thanks.
Paul Kraus

Jim F.