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