Good point. That said, this version will throw an error if you use a name that does not have a noun. But I think you could replace ".@}. with ".@}. ::] to deal with that case.
And you could use a different locale by replacing ". with do_locale_ or do__localeref Thanks, -- Raul On Mon, Jul 2, 2012 at 12:10 PM, Henry Rich <henryhr...@nc.rr.com> wrote: > Regex version: > > dolsub =: '\$[A-Z]*'&(".@}. rxapply) > > This just uses the current locale. > > Henry Rich > > On 7/2/2012 11:52 AM, Raul Miller wrote: >> Some programming languages (unix shell, perl, php) provide a $ >> substitution mechanism where a literal string may contain embedded >> variable references which get replaced with the value of the variable. >> >> This can be handy. >> >> Here's an example implementation of this kind of mechanism in J: >> >> IDCHARS=: '$ABCDEFGHIJKLMNOPQRSTUVWXYZ' >> >> dolsub1=: 1 :0 >> loc=. boxopen m >> n=. y (e. i. 0:) IDCHARS >> if. n < 3 do. <y return. end. >> nm=. }.n{. y >> if. 0 ~: nc__loc <nm do. <y return. end. >> <(,":do__loc nm),n}.y >> ) >> >> dolsub=: 1 :0 >> 2 }. [: ; [: m dolsub1;.1 '$ ', ] >> ) >> >> Example, given: >> >> sample=:0 :0 >> >> This is some sample text >> Here's an example substitution: >> ($IDCHARS) >> ) >> >> dolsub can replace $IDCHARS with the value defined for IDXCHARS: >> >> 'base' dolsub sample >> >> This is some sample text >> Here's an example substitution: >> ($ABCDEFGHIJKLMNOPQRSTUVWXYZ) >> >> >> Notes: >> >> dolsub is an adverb. The locale used to resolve names is its left >> argument. If you do not want the z locale to be referenced, make sure >> it's not a part of the locale's path. >> >> In this implementation, I only allow names which are ALL CAPS and >> which are at least 2 characters long. Extending this to support lower >> case alphanumerics is trivial. >> >> In this implementation, I only interpolate names with noun definitions. >> >> I do not attempt to provide table formatting for tabular values, >> because that gets into ambiguities I do not care about. I'm ravelling >> so I can ignore leading 1 dimensions. >> >> The expression y (e. i. 0:) IDCHARS is supported by special code (but >> that's only a minor speed improvement for this kind of routine). >> >> FYI, >> > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm