On Wednesday, October 12, 2016 at 6:54:45 AM UTC-4, Ian Thomas wrote:
> On Tuesday, October 11, 2016 at 9:50:12 PM UTC-4, Ben Greenman wrote:
> > Indirect answer: could you use `command-line` instead?
> > 
> > 
> > 
> > #lang racket/base
> > (require racket/cmdline)
> > 
> > 
> > (define input-from (make-parameter #f))
> > 
> > 
> > (command-line
> >   #:program "sample"
> >   #:once-each
> >   [("-i" "--input-file")
> >    i
> >    "Use <input_file> as the input file."
> >    (input-from i)]
> >   #:args (file)
> >   (printf "my argument is: ~a\n" file)
> >   ;; do things with `file` and `input-from` here
> > )
> > 
> > 
> > On Tue, Oct 11, 2016 at 9:24 PM, Ian Thomas <[email protected]> wrote:
> > I'm trying to add a simple command line interface to a program and receive 
> > the following error:
> > 
> > 
> > 
> > parse-command-line: expected argument of type <table as a list of 
> > flag-list/procedure pairs (spec-line help list strings must match procedure 
> > arguments)>; given: '((once-each (("-i" "--input\
> > 
> > -file") #<procedure:...sis/com_line.rkt:12:25> ("Use <input_file> as the 
> > input file."))))
> > 
> >   context...:
> > 
> > 
> > 
> > The command should take a single flag and an input file as arguments. Code 
> > below. Any help would be much appreciated.
> > 
> > 
> > 
> > #lang racket
> > 
> > 
> > 
> > (require racket/base
> > 
> >          racket/cmdline)
> > 
> > 
> > 
> > (parse-command-line "com_line"
> > 
> >                     ;; argv
> > 
> >                     (current-command-line-arguments)
> > 
> >                     ;; table
> > 
> >                     `((once-each
> > 
> >                        [("-i" "--input-file")
> > 
> >                         ,(lambda (flag in) (displayln "Using <in>"))
> > 
> >                         ("Use <input_file> as the input file.")]))
> > 
> >                     ;; finish-proc
> > 
> >                     (lambda (flag-accum file) file)
> > 
> >                     ;; help-proc
> > 
> >                     (lambda () (displayln "com_line -i | --input-file input 
> > file"))
> > 
> >                     ;; unknown-proc
> > 
> >                     (lambda (unknown_flag) (displayln "Unknown flag: 
> > <unknown_flag>")))
> > 
> > 
> > 
> > --
> > 
> > You received this message because you are subscribed to the Google Groups 
> > "Racket Users" group.
> > 
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to [email protected].
> > 
> > For more options, visit https://groups.google.com/d/optout.
> 
> I'd like to handle usage - help-proc - and unknown flags - unknown-proc - and 
> the documentation states you need to use parse-command-line and not 
> command-line to achieve this.

I've re-read the documentation and added some more arguments to the 
parse-command-line function, and now I think I'm almost there. Error messages 
immediately below: updated code follows.

$ ./com_line --input-file hacking.rkt
Using <in>
com_line: expects 1 <Input file.> on the command line, given 0 arguments

$ ./com_line --help
com_line -i | --input-file input file
com_line: expects 1 <Input file.> on the command line, given 0 arguments


#lang racket

(require racket/base
         racket/cmdline)

(parse-command-line "com_line"
                    ;; argv
                    (current-command-line-arguments)
                    ;; table
                    `((once-each
                       [("-i" "--input-file")
                        ,(lambda (flag in) (displayln "Using <in>"))
                        ("Use input file as the input file." "Input file.")]))
                    ;; finish-proc
                    (lambda (flag-accum file) file)
                    ;; arg-help-strs
                    '("Input file.")
                    ;; help-proc
                    (lambda (flag) (displayln "com_line -i | --input-file input 
file"))
                    ;; unknown-proc
                    (lambda (unknown_flag) (displayln "Unknown flag: 
<unknown_flag>")))

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to