This is about finding "MYFILE or MYDIR" from within a script in a portable
manner from different computers. (so avoiding hardcoding filenames/paths in
code)
I do this with this line pasted in files that need it
MYDIR =: getpath_j_ '\/' rplc~ > (4!:4<'thisfile'){(4!:3) thisfile=:'' NB.
boilerplate to set the working directory
the 4!:3 list gets apparently updated by the J system before 0!:n processes the
file. Updated with a filename. Not updated if a noun is generated from the
file contents, and 0!:n called on that noun.
My workaround is designed to still work when the regular J process for load
from file is used, but also work when files are preprocessed (to remove/expand
invalid J syntax into J syntax) replacing toplevel lines starting with MYDIR =:
with a hardcoded value (the load command overridden to make this replacement,
as well as any desired preprocessing before invoking 0!:n on the resulting
noun)
To be useful to others, MYDIR would be a magic noun, if they used my extension
(jplusplus)
On Friday, August 24, 2018, 3:20:01 p.m. EDT, Raul Miller
<[email protected]> wrote:
Note that you can append a: (or whatever other boxed string) to the
value from 4!:3 before indexing with the result from 4!:4
Perhaps having the system do this would be a slight convenience?
Thanks,
--
Raul
On Fri, Aug 24, 2018 at 2:57 PM 'Pascal Jasmin' via Programming
<[email protected]> wrote:
>
> Rewriting scripts and then invoking them with 0!:0 noun (instead of file) has
> the disadvantage of "breaking" 4!:4. If 4!:4 is ever used on a definition
> from the file, it will report _1 (definition not from a script). This
> applies to definitions inside the original file, often used to find the
> directory of the program, and used to load related files and data.
> The perfect solution is to add an optional left argument to 0!:n noun which
> would be the filename returned by 4!;4 for definitions inside that noun.
> A solution I can do myself, applies if the only real use for 4!:4 is in fact
> to find "MYFILE" in a script.
> The solution is to replace in the file all top level instances of lines
> starting with (space intollerant)
> MYDIR =:MYFILE =: (NB. not sure if this is needed, as the file is usually
> obtained just to get MYDIR)
> with a hardcoded string derived from what the x argument (MYFILE) to 0!:n
> should be.
> If this function over-rode the load command, then 4!;4 would return empty for
> most definitions, which is only a problem if 4!:4 is ever used for anything
> other than on a variable within its own script .
> ----------------------------------------------------------------------
> 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