Re: Batch
- To: mathgroup at smc.vnet.net
 - Subject: [mg60473] Re: [mg60364] Batch
 - From: Maria Cristina Dias Tavares <cristina at dsce.fee.unicamp.br>
 - Date: Sat, 17 Sep 2005 02:31:54 -0400 (EDT)
 - References: <20050916044831.D106BBC36@mfep9.connect.com.au>
 - Sender: owner-wri-mathgroup at wolfram.com
 
Hello again,
    I will just copy a simple code below to describe what I am getting. 
The output in the first notebook is a = a; b = b ; ...
    What I want is to execute this like a routine, so nb2 should be 
evaluated before the Print[].
    I understand that my program may need some improvement and I will 
work on that, but I really want to know how to solve the problem I have 
just described.
    Thanks again
          Maria Cristina
++++++++++++++++++++++++++++++++++   notebooks ++++++++++++++++++++++++
                    This is the former notebook ;
Do[
  {
     c = 3,
     nb2 = NotebookOpen["tt1.nb"],
     SelectionMove[nb2, All, Notebook],
     Print["k main ", k],
     SelectionEvaluate[nb2],
     Print["a = ", a],
     Print["b = ", b],
     Print["ac = ", ac],
     Print["bc = ", bc],
    },
  {k, 1, 1}]
                       tt1.nb :
Print["k = ",k," nb2"]
a=k+2
ac=c+2
 nb3=NotebookOpen["tt2.nb"]
 SelectionMove[nb3,All,Notebook]
 SelectionEvaluate[nb3]
saida=ToString[k]
saida=StringInsert[saida,".tt1.sai",StringLength[saida]+1]
NotebookSave[nb2,saida]
                                tt2.nb
Print["k = ",k," tt2"]
b=k+10
bc=c+10
saida=ToString[k]
saida=StringInsert[saida,".tt2.sai",StringLength[saida]+1]
NotebookSave[nb3,saida]
David Annetts wrote:
>Hi Maria, 
>
>  
>
>>    I thank both Dave and Luc very much, I manage to go one 
>>step further.
>>
>>    I have tryed  SelectionEvaluation before, but I could not 
>>identify the notebook properly. Now after you told me I tryed 
>>with NotebookOpen and it couldn't find the file ($Failed). I 
>>had to include my working directory in the preferences, and 
>>now it works.
>>
>>    I prepare a very simple test, just a notebook calling a 
>>second nb which calls a third one.  It works perfectly, 
>>opened and executed each notebook without a problem.
>>
>>    Then I put these callings inside a loop (Do) which would 
>>just print the loop iteration number.
>>
>>    Now I come to another problem. All the expressions inside 
>>the loop are executed and only afterwards the execution of  
>>the second notebook is performed. Only after that the 
>>execution of notebook 3 is evaluated.
>>
>>    This is not what I need. I need that the calling of the 
>>notebook evalutaion is treated  like if it were a routine, 
>>the program is deviated to the second notebook and after 
>>evaluating it completely it would come back to the following 
>>command inside the loop.
>>
>>    Can anyone give me another advice ?
>>    
>>
>
>Just to ensure I understand you, you have
>
>	nb01 -> nb02 -> nb03
>
>Which works.  However, you need
>
>	nb01 -> Do[nb02, {iter}]] -> nb03.
>
>To me (and assuming I've got it right), this sounds like a perfect
>application for a package.  The minimum you need to do is save the notebook
>as a package (Save as special -> package).  Commands in the package  (it's
>difficult to tell exactly what you've done) can then be called as part of a
>loop, much as you would call any of the standard packages.  
>
>Hope that helps,
>
>Dave.
>  
>
-- 
Profa Maria Cristina Tavares
Faculdade de Engenharia Elétrica e de Computação
UNICAMP / FEEC / DSCE
CP 6101 - CEP 13083-970
tel : (19) 3788 3738
fax : (19) 3289 1395
http://www.dsce.fee.unicamp.br/~cristina
--------------070400090109010604090601
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hello again,<br>
<br>
    I will just copy a simple code below to describe what I am getting.
The output in the first notebook is a = a; b = b ; ...<br>
<br>
    What I want is to execute this like a routine, so nb2 should be
evaluated before the Print[].<br>
<br>
    I understand that my program may need some improvement and I will
work on that, but I really want to know how to solve the problem I have
just described.<br>
<br>
    Thanks again<br>
<br>
          Maria Cristina<br>
++++++++++++++++++++++++++++++++++   notebooks ++++++++++++++++++++++++<br>
<br>
                    This is the former notebook ;<br>
Do[<br>
  {<br>
     c = 3,<br>
     nb2 = NotebookOpen["tt1.nb"],<br>
     SelectionMove[nb2, All, Notebook],<br>
     Print["k main ", k],<br>
     SelectionEvaluate[nb2],<br>
     Print["a = ", a],<br>
     Print["b = ", b],<br>
     Print["ac = ", ac],<br>
     Print["bc = ", bc],<br>
    },<br>
  {k, 1, 1}]<br>
<br>
                       tt1.nb :<br>
Print["k = ",k," nb2"]<br>
a=k+2<br>
ac=c+2<br>
 nb3=NotebookOpen["tt2.nb"]<br>
 SelectionMove[nb3,All,Notebook]<br>
 SelectionEvaluate[nb3]<br>
saida=ToString[k]<br>
saida=StringInsert[saida,".tt1.sai",StringLength[saida]+1]<br>
NotebookSave[nb2,saida]<br>
<br>
                                tt2.nb<br>
<br>
Print["k = ",k," tt2"]<br>
b=k+10<br>
bc=c+10<br>
saida=ToString[k]<br>
saida=StringInsert[saida,".tt2.sai",StringLength[saida]+1]<br>
NotebookSave[nb3,saida]<br>
<br>
David Annetts wrote:<br>
<blockquote cite="mid20050916044831.D106BBC36 at mfep9.connect.com.au"
 type="cite">
  <pre wrap="">Hi Maria, 
  </pre>
  <blockquote type="cite">
    <pre wrap="">    I thank both Dave and Luc very much, I manage to go one 
step further.
    I have tryed  SelectionEvaluation before, but I could not 
identify the notebook properly. Now after you told me I tryed 
with NotebookOpen and it couldn't find the file ($Failed). I 
had to include my working directory in the preferences, and 
now it works.
    I prepare a very simple test, just a notebook calling a 
second nb which calls a third one.  It works perfectly, 
opened and executed each notebook without a problem.
    Then I put these callings inside a loop (Do) which would 
just print the loop iteration number.
    Now I come to another problem. All the expressions inside 
the loop are executed and only afterwards the execution of  
the second notebook is performed. Only after that the 
execution of notebook 3 is evaluated.
    This is not what I need. I need that the calling of the 
notebook evalutaion is treated  like if it were a routine, 
the program is deviated to the second notebook and after 
evaluating it completely it would come back to the following 
command inside the loop.
    Can anyone give me another advice ?
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Just to ensure I understand you, you have
	nb01 -> nb02 -> nb03
Which works.  However, you need
	nb01 -> Do[nb02, {iter}]] -> nb03.
To me (and assuming I've got it right), this sounds like a perfect
application for a package.  The minimum you need to do is save the notebook
as a package (Save as special -> package).  Commands in the package  (it's
difficult to tell exactly what you've done) can then be called as part of a
loop, much as you would call any of the standard packages.  
Hope that helps,
Dave.
  </pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">-- 
Profa Maria Cristina Tavares
Faculdade de Engenharia Elétrica e de Computação
UNICAMP / FEEC / DSCE
CP 6101 - CEP 13083-970
tel : (19) 3788 3738
fax : (19) 3289 1395
<a class="moz-txt-link-freetext" href="http://www.dsce.fee.unicamp.br/~cristina">http://www.dsce.fee.unicamp.br/~cristina</a></pre>
</body>
</html>
--------------070400090109010604090601--