RE: Block[], OpenRead[], & /@
- To: mathgroup at smc.vnet.net
- Subject: [mg75943] RE: [mg75862] Block[], OpenRead[], & /@
- From: "David Annetts" <davidannetts at aapt.net.au>
- Date: Mon, 14 May 2007 03:26:34 -0400 (EDT)
- References: <200705120705.DAA23873@smc.vnet.net>
Hi Mary Beth, > > files = FileNames["*txt"] > > strm6 = OpenRead["Au6002.txt"] > Skip[strm6, Record, 4, NullRecords -> False] (*First 4 > lines of each > files contains non-numeric values, so skip these lines*) > six= ReadList[strm6, Table[Number, {i, 1, 19}]] (*Put the > data into a > table called by a name*) > Close[strm6] > > > I would like to take automat this so that I am not copying > and pasting file names so I thought I could use the Block[] > funtion and then map the process onto all the file names in > the directory. When I imput the following code: > > Block[{str}, str = OpenRead[#]; Skip[str, Record, 4, > NullRecords -> False]; ReadList[ > str, Table[Number, {i, 1, 19}]]; Close[str]] & /@ files > > > my output is: > {Au6001.txt, Au6002.txt, Au6003.txt, Au6004.txt, Au6005.txt} > > I do not understand why I get the output I see above. When I > modify the code above to: > > > Block[{str}, str = OpenRead[#]; > Skip[str, Record, 4, > NullRecords -> False]; one = ReadList[ > str, Table[Number, {i, 1, 19}]]; Close[str]] & /@ files > > and ask for > > one // TableForm > > then I get the data for the last file in the list of file > names which indicates to me that I may be close in getting > this whole thing to work. You're sort of close .... The key is the Close[] statement. Occuring as it does as the last line of your block means that the Block returns only the output of Close -- the name of the file that is being closed. The easiest fix is to insert and extra line in your Block with the line "one" ie Block[{str}, str = OpenRead[#]; Skip[str, Record, 4, NullRecords -> False]; one = ReadList[str, Table[Number, {i, 1, 19}]]; Close[str]; one] & /@ files This is equivalent to Block[{str}, str = OpenRead[#]; Skip[str, Record, 4, NullRecords -> False]; one = ReadList[str, Table[Number, {i, 1, 19}]]; Close[str]; Return[one]]& /@ files which (to me anyway) is clearer. Return[] is redundant and there is a school of thought which holds that including it only encourages the use of multiple paths from a Module (or Block). Regards, Dave.
- References:
- Block[], OpenRead[], & /@
- From: "Mary Beth Mulcahy" <mulcahy.marybeth@gmail.com>
- Block[], OpenRead[], & /@