Raph,

 

Thanks so much again. I was able to make my code run barely in some
kludge using the following snippet before I got your elegant solution.
It will certainly prove my immaturity in programming in Oz. I am having
small problem in running your snippet though. I am thinking it is
probably breaking when file name is less than 4 characters (there are
those . and .. files in a dir). May be something else. I should be able
to debug that though (I hope).

 

define

Sched

 

 % Get the .ozf files from ProgramSpecificConstraint dir

    local Files in 

      Files = {OS.getDir
'D:\\data\\amaity\\workspace\\Scheduler\\src\\ProgramSpecificConstraints
'}    

      {ForAll Files proc{$ X} Y Z in

                               {String.token X &. Y Z}

                               if Z == "ozf" then 

                                      [Sched] = {Module.link
[{String.toAtom X}]}

                                      {Browse 'linking
file'#{String.toAtom Y}}

                               else

                                      {Browse 'did nothing'}

                               end

                            end

      }   

    end

 

Thanks again,

 

Ashis

________________________________

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Raphael Collet
Sent: Thursday, October 16, 2008 4:50 PM
To: Mozart users
Subject: Re: "import" ing ozf dynamically

 

Dear Ashis,

There are a few problems in your function ImportFiles.  First, dirName
is an atom, not a variable name!  Then you should filter the list of
files you get, to keep the ones ending in ".ozf".

%% return the list of filenames in the given directory that end in
".ozf"
fun {ImportFiles DirName}
   Files = {OS.getDir DirName}
   % in that list, keep the filenames that end in ".ozf"
   OzfFiles = {Filter Files fun {$ F} {Drop F {Length F}-4}==".ozf" end}
in
   % add DirName in front of all
   {Map OzfFiles fun {$ F} {Append DirName &\|F} end}
end

%% load all those modules
Mods = {Module.load {ImportFiles
"D:\\data\\amaity\\workspace\\Scheduler\\src\\ProgramSpecificConstraints
"}}

Cheers,
raph

On Thu, Oct 16, 2008 at 9:05 PM, Maity, Ashis K <[EMAIL PROTECTED]>
wrote:

Raph,

 

Thanks for your response. In fact that's the way I started with. May be
I am doing something else wrong. Just to make one point clear is that I
don't know the ozf file names before hand and only the directory where
they would be residing. So I want to check all the files in that
directory and dynamically link all the .ozf files either through
"import" or through the modules that you are suggesting. So the
following should work inside "define" block - right?

 

% Get the .ozf files from ProgramSpecificConstraint dir

    fun{ImportFiles dirName} 

     Files = {OS.getDir dirName}

     {ForAll Files proc{$ X} Y Z in

            {String.token X &. Y Z}

            if Z == "ozf" then 

                    %Files = X

                    {Browse 'linking file'#{String.toAtom Y}}

                else

                     {Browse 'did nothing'}

                end

     end

      } in Files  

  end

 

 [Sched] = {Module.link [ {ImportFiles
'D:\\data\\amaity\\workspace\\Scheduler\\src\\ProgramSpecificConstraints
'}]}

 

 

This does compile though. But getting some runtime issues.

 

Thanks,

 

Ashis

 

________________________________

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Raphael Collet
Sent: Thursday, October 16, 2008 2:03 PM
To: Mozart users
Subject: Re: "import" ing ozf dynamically

 

Dear Ashis,

There is a simpler way to load a module from an .ozf file: Module.link.
It takes a list of urls (or file names) and returns a list of modules
(instantiated from the functors found in the files):

[ModuleFoo]={Module.link ['Foo.ozf']}

Cheers,
raph

On Thu, Oct 16, 2008 at 7:01 PM, Maity, Ashis K <[EMAIL PROTECTED]>
wrote:

Hello,

 

I am new to Mozart. I am trying the following piece of code where I am
trying to import .ozf files dynamically. Is it possible? Seems like I am
always getting the following error (tried "import" both at inside the
proc or calling it from outside) where I try to link the dynamically
obtained file name with a variable name e.g., Sched at X : syntax error,
unexpected T_VARIABLE, expecting T_OZATOM

 

% Get the .ozf files from ProgramSpecificConstraint dir

    proc{ImportFiles dirName ?File} Files in

      Files = {OS.getDir dirName}

      {ForAll Files proc{$ X} Y Z  in

                               {String.token X &. Y Z}

                               if Z == "ozf" then XX in

                                      functor XX

                                      import

                                         Sched at X

                                      end

                                     File = X

                               else

                                      {Browse 'did nothing'}

                               end

                            end

      }

   end

 

%import

   %Sched at {ImportFiles '.'}

 

Thanks so much,

 

Ashis

 


________________________________________________________________________
_________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

 


________________________________________________________________________
_________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

 

_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to