Re: Portable Notebooks and Filenames[]
- To: mathgroup at smc.vnet.net
- Subject: [mg58047] Re: Portable Notebooks and Filenames[]
- From: "John Jowett" <John.Jowett at cern.ch>
- Date: Fri, 17 Jun 2005 05:18:45 -0400 (EDT)
- Organization: CERN - European Laboratory for Particle Physics
- References: <d8e4e7$gik$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hello,
I've worked in a very similar situation for many years, using a
file system accessible from both Windows and Linux. With a little care, all
my Mathematica notebooks work unchanged on either system.
The following are fictititious names, just to illustrate.
Suppose that the root of the file system appears as "/universalfs" in Linux
and is mounted as drive U: in Windows. Then something like the following
is a convenient setup (sorry I don't know the right syntax for Mac):
uRoot = Switch[$OperatingSystem, "Windows", "U:", "Unix", "/universalfs",
"MacOSX", "HD"]
so you can do things like
SetDirectory[ToFileName[{uRoot, "users", "fred", "work"} ]]
Get[ToFileName[{uRoot, "users", "fred", "setup"}, "myfunctions.m" ]]
I actually have more elaborate things in a package that I always load but
this gives the basic idea. You can still use it even if you don't have
access to a common system but just work with parallel structures.
Of course if you just want to work relative to an initial starting folder
with sub-folders then you don't even need uRoot.
John Jowett
"frank" <frank at kuesterei.ch> wrote in message
news:d8e4e7$gik$1 at smc.vnet.net...
> Hi,
>
> in our group we are using Mathematica both on Windows and on Linux (and
> I'm about to convert a MacAddict to Mathematica). However, we are
> facing one problem with external file names.
>
> It is possible to use
>
> In[1]:=
> SetDirectory["some/directory/subdirectory"];
>
> (from a syntax point of view; of course the beginning of the string will
> be different, like ~/netdrive vs. w:)
>
> On the other hand, this works only on Linux:
>
> In[2]:=FileNames["subdir/*"]
>
> while on Windows, only this construct works:
>
> In[3]:=FileNames["subdir\\*"]
>
> (\ needs to be escaped because \* or nearly any \<letter> combination
> has some meaning).
>
> This is weird - first because Windows understands the forward slash as a
> directory separator, and second because it means we have to do
> search-replace orgies when trying a notebook on a different OS. This
> would not only happen in a preamble part, but we even have some
> functions that read all data in a subdirectory, for a list of
> subdirectories.
>
> Is there a way to write such expressions portable? Is there, for
> example, an internal variable "directory separator" that could be used
> in this string? Alternatively, if it's possible to replace \\ by / (and
> vice versa) by some string matching mechanism, we could write a function
> that does this if some boolean is set once in the notebook, or even
> depending on some internal variable that indicates the OS?
>
> Regards, Frank
> --
> Frank Küster
> Inst. f. Biochemie der Univ. Zürich
> Debian Developer
>
- Follow-Ups:
- Re: Re: Portable Notebooks and Filenames[]
- From: frank <frank@kuesterei.ch>
- Re: Re: Portable Notebooks and Filenames[]