# OptionParser Question

**URL:** <https://www.ruby-forum.com/t/optionparser-question/123804>\
**Category:** Ruby\
**Created:** [December 20, 2007, 8:27pm UTC](https://www.ruby-forum.com/t/optionparser-question/123804 "2007-12-20T20:27:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [December 20, 2007, 8:27pm UTC](https://www.ruby-forum.com/t/optionparser-question/123804/1 "2007-12-20T20:27:13Z")

</div>

Hello all,

I’m using OptionParser to parse command line options. I’ve figured out  
how  
to handle options for each flag (i.e. opts.on(’–port PORT’)), but I’m  
not  
sure how to handle command line arguments that aren’t associated with a  
flag. For example, say I wanted to parse a file with my file\_parser  
executable using a certain type of parser. I’d like to say “file\_parser  
–type CDF \<file\_name\>”. I know how to get the type of parser to use  
(see  
above), but I’m not so sure how to easily get the name of the file I  
want to  
parse.

Any suggestions? Thanks! – BTR

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [December 20, 2007, 9:21pm UTC](https://www.ruby-forum.com/t/optionparser-question/123804/2 "2007-12-20T21:21:12Z")

</div>

Alle Thursday 20 December 2007, Bryan R. ha scritto:

> Any suggestions? Thanks! – BTR

Command line arguments (that is, those not associated with an option)  
can be obtained in a different way, depending on wheter you use  
OptionParser#parse or OptionParser#parse!. The former returns an array  
with all the arguments; the second modifies its argument, removing all  
the options (and their arguments) and leaving only the command line  
arguments. For example:

require ‘optparse’

options= {}  
o = OptionParser.new do |o|  
o.on(’–type TYPE’, ‘Use TYPE parser’){|t| options[:type]=t}  
end

args = o.parse ARGV  
puts “The arguments are #{args.inspect}”

If you want to use parse!, replace the last two lines with:

o.parse! ARGV  
puts “The arguments are #{ARGV.inspect}”

I hope this helps

Stefano

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [December 20, 2007, 9:19pm UTC](https://www.ruby-forum.com/t/optionparser-question/123804/3 "2007-12-20T21:19:27Z")

</div>

On Dec 20, 2007, at 12:26 PM, Bryan R. wrote:

> “file\_parser  
> –type CDF \<file\_name\>”. I know how to get the type of parser to  
> use (see  
> above), but I’m not so sure how to easily get the name of the file  
> I want to  
> parse.
> 
> Any suggestions? Thanks! – BTR

don’t bother:

1. gem install main

2. cat a.rb  
#! /usr/bin/env ruby

Main {

argument(‘file\_name’){}

option(‘type’){  
argument :required  
}

def run  
p params[‘file\_name’].given?  
p params[‘file\_name’]  
p params[‘type’].given?  
p params[‘type’]  
end  
}

a @ [http://codeforpeople.com/](http://codeforpeople.com/)

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [December 20, 2007, 9:55pm UTC](https://www.ruby-forum.com/t/optionparser-question/123804/4 "2007-12-20T21:55:50Z")

</div>

On 20.12.2007 21:20, Stefano C. wrote:

> > –type CDF \<file\_name\>". I know how to get the type of parser to use (see  
> > o = OptionParser.new do |o|
> 
> I hope this helps

The question is, does Bryan want to treat the file name as part of the  
option (for example, because there might be multiple occurrences) or  
whether it’s simply one of the names to process. You provide a solution  
for the latter. A solution for the other variant might be

o.on(’–parse-cdf FILE’, ‘parse file with CDF’) {|file| …}

i.e. pull the type into the option.

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![roxah](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@roxah](https://www.ruby-forum.com/u/roxah)\
**Post date:** [December 21, 2007, 12:48am UTC](https://www.ruby-forum.com/t/optionparser-question/123804/5 "2007-12-21T00:48:23Z")

</div>

Ah yes… this worked great!!! Thanks! – BTR
