I think this is close to what you want. It doubles embedded quotes and
ignores leading and trailing quotes if present. That way one can still
enter a string which is really supposed have a quote at the begining or
end. The only real problem is that if one wanted to start or end with a
quote but forgot to add one extra.
quotes=:3 : 0
'''' quotes y NB. Default left argument is quote.
:
'l r'=.x=({.,{:)y NB. Remove leading and trailing quotes if present.
s=.l}.(-r)}.y
s=.s#~>:x=s NB. Double quotes.
x,s,x NB. Put leading and trailing quotes back.
)
s=:}:0 : 0
x y' z '
)
s
x y' z '
quotes s
'x y'' z '
s2=:}:0 : 0
x y' z ''
)
s2
x y' z ''
quotes s2
'x y'' z '''
On Sun, Feb 12, 2012 at 10:16 AM, R.E. Boss <[email protected]> wrote:
> This is quite an adequate answer.
>
> The origin was that I was thinking why character strings have all these
> quote rules. Obviously, to distinguish them from (user defined) nouns.
> But what if I wanted to present the J-GUI to an innocent user who
> certainly
> will not remember these rules? Then I'm (and so she will be) stuck.
> Unless, as you suggest, I "take over the REPL".
>
> (I wasn't (directly) thinking J-lite, but perhaps this will come in handy
> in
> the future.)
>
> For this moment I should bypass the problem and ask the user to enter the
> string(s) in a csv-file and then start J by reading that file.
>
> Thanks for all comments.
>
>
> R.E. Boss
>
>
> > -----Oorspronkelijk bericht-----
> > Van: [email protected] [mailto:programming-
> > [email protected]] Namens Dan Bron
> > Verzonden: zondag 12 februari 2012 16:38
> > Aan: 'Programming forum'
> > Onderwerp: Re: [Jprogramming] quote problem
> >
> > Of course, that part's easy.
> >
> > ntt =: verb def '5!:5{.;:''y''' NB. Noun To Text
> >
> > ntt;._2 noun define -.TAB
> > a. i. '(`'3
> > a. i. '(`'3'
> > 'open 'quote
> > )
> > 'a. i. ''(`''3'
> > 'a. i. ''(`''3'''
> > '''open ''quote'
> >
> > But it goes back to the original questions:
> > 1. What is the source of these strings?
> > _Where_ is your user typing them in?
> >
> > 2. What is processing these strings?
> >
> > If the answer to #1 is a file, or a GUI (e.g. wd, web interface, etc) or
> > anywhere other than immex mode, the answer is easy. But I'm getting the
> > sense that the very reason you want to quote these strings is so that J
> can
> > process them in immex mode. You don't need them quoted for your own
> > purposes.
> >
> > That is, you're trying to give your user access to the power of J
> (because
> > it's so close to what your user needs already....) but you feel that
> > out-of-the-box, J is a little too picky about input. That is, J is
> > powerful, but not trivial to learn and use. So you want something like
> J,
> > but simpler, easier. You want a "Simple J"; an "Easy J".
> >
> > Is that right? If so, does it sound familiar?
> >
> > Anyway, if that is what you're after (the user typing something J-like
> but
> > not-quite-J into immex mode), then you need to commandeer the IJX
> > session
> > manager. Because, by definition, anything typed into the IJX session
> > manager has to be a valid J sentence. But once you take over the REPL,
> you
> > can do whatever you like; you can implement your own, J-like language.
> >
> > http://www.jsoftware.com/jwiki/RicSherlock/Temp/InteractiveProm
> > pt
> > (Note in particular the caveats at the bottom of the page)
> >
> > http://www.jsoftware.com/jwiki/DanBron/Temp/REPL
> > (A similar program)
> >
> > Which leads me to question #2: what other things does your language
> > permit,
> > that J would not, out-of-the-box? Because, once you solve your quoting
> > problem, if you're still using ". (i.e., J) to process your strings,
> you're
> > going to hit new hurdles.
> >
> > i =: 2 NB. User is typing this stuff in
> > j =: 3
> >
> > i j { i. 4 5
> > |syntax error
> > | i j{i.4 5
> > |[-0]
> >
> > NB. ??? I'm a sad, confused user
> >
> > +:^:3 2 NB. RE told me about this power operator thing, it
> > sounds so cool!
> > +:^:3 2
> >
> > NB. Darn, it's broken!
> >
> > Of course, I could be reading too much into your messages, and be totally
> > off-base about this "J Lite" thing. If so, can you share the bigger
> picture
> > of your use case? Who is the user, what is he doing, what are his
> > objectives, what is his interface to your application, etc?
> >
> > -Dan
> >
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]] On Behalf Of R.E. Boss
> > Sent: Sunday, February 12, 2012 9:40 AM
> > To: 'Programming forum'
> > Subject: Re: [Jprogramming] quote problem
> >
> > The (input) string should be considered as one group (of chars).
> > Quoting is needed if the first or the last (or both) is not a quote, all
> > inside quotes should be doubled if they are not.
> >
> >
> > R.E. Boss
> >
> >
> > > -----Oorspronkelijk bericht-----
> > > Van: [email protected] [mailto:programming-
> > > [email protected]] Namens Don Guinn
> > > Verzonden: zondag 12 februari 2012 14:03
> > > Aan: Programming forum
> > > Onderwerp: Re: [Jprogramming] quote problem
> > >
> > > Given the string contains several groups of non-blanks, would each
> group
> > > need to be surrounded with quotes and quotes within it doubled if not a
> > > number, or only if it contained one or more quotes? Or should the
> string
> > be
> > > considered as one group? Again, when would quoting be needed?
> > >
> > > On Sun, Feb 12, 2012 at 1:17 AM, R.E. Boss <[email protected]> wrote:
> > >
> > > > The problem boils down to the fact that J requires a string (of
> chars)
> > to
> > > > be
> > > > enclosed in (single) quotes and the inside quotes have to be doubled.
> > > > (Contrary to a spreadsheet (e.g.) where a cell is of type char if it
> is
> > not
> > > > a number.)
> > > > But what if I don't want bother a user with these requirements, she
> > enters
> > > > a
> > > > string and my verb does the enclosing and doubling, if necessary?
> > > >
> > > >
> > > > R.E. Boss
> > > >
> > > >
> > > > > -----Oorspronkelijk bericht-----
> > > > > Van: [email protected] [mailto:programming-
> > > > > [email protected]] Namens Dan Bron
> > > > > Verzonden: zaterdag 11 februari 2012 20:35
> > > > > Aan: J Programming
> > > > > Onderwerp: Re: [Jprogramming] quote problem
> > > > >
> > > > > Oh, just saw Henry's response and he interpreted your question
> > > > differently.
> > > > >
> > > > > If you're not typing these strings in, then what is the source?
> And
> > what
> > > > is
> > > > > processing them (is it ;: ? if it's ". there's more to worry about
> > than
> > > > proper
> > > > > quoting).
> > > > >
> > > > > Anyway, if the strings are coming from e.g. a file and the trouble
> is
> > > > with
> > > > > parsing them using ;: (instead of evaluating them in the immex
> > session),
> > > > then
> > > > > you could try something along the lines of (#~ 2 * '''' = ]) y
> (i.e.
> > > > double
> > > > > singleton quotes).
> > > > >
> > > > > -Dan
> > > > >
> > > > > Please excuse typos; composed on a handheld device.
> > > > >
> > > > > -----Original Message-----
> > > > > From: Dan Bron <[email protected]>
> > > > > Sender: [email protected]
> > > > > Date: Sat, 11 Feb 2012 14:05:16
> > > > > To: Programming forum<[email protected]>
> > > > > Reply-To: Programming forum <[email protected]>
> > > > > Subject: Re: [Jprogramming] quote problem
> > > > >
> > > > > Unlike C, where \ introduces an escape sequence within string
> > liberals,
> > > > in
> > > > J,
> > > > > the only special character in a literal is ' (single quote).
> > > > >
> > > > > So, to embed quotes in strings, double them up: a. i. '(`''3' .
> > Of
> > > > course,
> > > > > recursively embedded quotes need quadrupling, octupling, etc (eg
> 'he
> > > said
> > > > > ''she said ''''yes'''', but she lied'', if you can believe that').
> > > > >
> > > > > The syntax error in your first example is due to the juxtaposition
> of
> > two
> > > > > nouns, the string '(`' and the number 3 .
> > > > >
> > > > > -Dan
> > > > >
> > > > >
> > > > > On Feb 11, 2012, at 1:04 PM, "R.E. Boss" <[email protected]>
> wrote:
> > > > >
> > > > > > If I want to process an arbitrary string, I may encounter a
> string
> > > > which
> > > > > > might give a "syntax error" or an "open quote" message.
> > > > > >
> > > > > > How can I detect such a situation and how can I repair the given
> > > > string?
> > > > > >
> > > > > >
> > > > > >
> > > > > > a. i. '(`'3
> > > > > >
> > > > > > |syntax error
> > > > > >
> > > > > > | a. i.'(`'3
> > > > > >
> > > > > >
> > > > > >
> > > > > > a. i. '(`'3'
> > > > > >
> > > > > > |open quote
> > > > > >
> > > > > > | a.i.'(`'3'
> > > > > >
> > > > > > | ^
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > R.E. Boss
> > > > > >
> > > > > >
> > ----------------------------------------------------------------------
> > > > > > For information about J forums see
> > > > > http://www.jsoftware.com/forums.htm
> > > > >
> ----------------------------------------------------------------------
> > > > > For information about J forums see
> > > http://www.jsoftware.com/forums.htm
> > > > >
> ----------------------------------------------------------------------
> > > > > For information about J forums see
> > > http://www.jsoftware.com/forums.htm
> > > >
> > > >
> ----------------------------------------------------------------------
> > > > For information about J forums see
> > > http://www.jsoftware.com/forums.htm
> > > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see
> > http://www.jsoftware.com/forums.htm
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm