Re: Q: (how?) notebooks with I/O loop
- To: mathgroup at smc.vnet.net
- Subject: [mg40270] Re: Q: (how?) notebooks with I/O loop
- From: sodastereo at eudoramail.com (Julius Carver)
- Date: Fri, 28 Mar 2003 04:33:04 -0500 (EST)
- References: <b5rme7$eum$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Jason Miller <millerj at truman.edu> wrote in message news:<b5rme7$eum$1 at smc.vnet.net>... > Dear Mathematica Gurus. > > I am working with a student (undergraduate math major) who is using > Wavelet Explorer to process numerous datasets using a multiresolution > analysis with various parameter settings. We would like to know how > we might create a notebook that would > (1) read in a datafile from a list of files in a local > directory (or in a hardcoded array), Ok Jason. First of all you need to create a list of the files in your local directory. If you work with Linux/Unix you can do that writing "ls >> inputfiles.txt" in the shell. If you work with Windows, you can use Cygwin, A Unix enviroment under Windows. Now well, to avoid writing the complete route of the files you have to use In[1]:= SetDirectory["D:\\local directory"] Out[1]= "D:\\local directory" Then you have to transform the list into a Mathematica list In[9]:= inputfiles = ReadList["inputfiles.txt", Record] Out[9]= {"a1.txt", "a2.txt", "a3.txt", "inputfiles.txt"} In every ai.txt I wrote arrays of numbers of order 3 x 3. In order to read and use them as matrices I use In[24]:= data = ReadList[#, Number, RecordLists -> True] & /@ Drop[inputfiles, -1] Out[24]= {{{1, 3, 5}, {4, 6, 8}, {5, 7, 9}}, {{2, 3, 9}, {1, 4, 2}, {5, 8, 4}}, {{7, 3, 6}, {9, 4, 1}, {5, 0, 3}}} > (2) run a multiresolution analysis on the file (this analysis > is already coded) > (3) save the results (e.g., in the form of a mathematica notebook), Suppose that you want to calculate the determinants of data and save the results in a notebook with the same name of input file. First you make the calculations In[25]:= results = Det[#] & /@ data Out[25]= {0, -90, -102} After that you have to make a list of outputfiles In[18]:= outputfiles = Drop[StringReplace[#, "txt" -> "nb"] & /@ inputfiles, -1] Out[18]= {"a1.nb", "a2.nb", "a3.nb"} And finally you have to put the results in the outputfiles In[26]:= Table[Put[results[[i]], outputfiles[[i]]], {i, Length[results]}] Out[26]= {Null, Null, Null} > (4) do the same in turn for each of the datasets in a local > directory, as described in (1). > Having a way to create such a 'loop' would save us much time, but > we're don't know how to direct Mathematica to save the results of > each analysis. The function that makes all this for you is In[27]:= readingandsaving[listoffiles_String] := Module[{inputfiles = ReadList[listoffiles, Record]}, data = ReadList[#, Number, RecordLists -> True] & /@ Drop[inputfiles, -1]; outputfiles = Drop[StringReplace[#, "txt" -> "nb"] & /@ inputfiles, -1]; results = Det[#] & /@ data; Table[Put[results[[i]], outputfiles[[i]]], {i, Length[results]}]] > > Can anybody tell us how we might do this, or if it's a reasonable thing to do? > > Thank you in advance. > > Jason Hope this help Julius