Re: Input, output troubles me ...
- To: mathgroup at smc.vnet.net
- Subject: [mg70061] Re: Input, output troubles me ...
- From: Peter Pein <petsie at dordos.net>
- Date: Sun, 1 Oct 2006 04:10:43 -0400 (EDT)
- References: <efldl4$d6s$1@smc.vnet.net>
luigirmailbox-mathematica at yahoo.it schrieb: > Dear Friends > > I have been using Mathematica for text file processing for a long time. > I found it's a valuable tool for text complex manipulations. > > The strategy I was used to apply is well condensed in this childish > example: > > --------------------------------- > (*loading the content*) > dummy = Import["c:\\myDir\\inputFile.txt", "Lines"]; > (*processing it*) > dummy = Select[dummy, (# != "a") &]; > (*exporting it*) > Export["c:\\myDir\\outpuFile.txt", dummy, "Lines"]; > --------------------------------- > > Now I have to face huge file (up to 5,6 Gb sized) and the previous > technique mostly crashes my systems. > > I would like to process a single line, rather than the whole load, > doing something similar what a classical programmig language does: > > --------------------------------- > Open "c:\\myDir\\inputFile.txt" for Input As #1 > Open "c:\\myDir\\outputFile.txt" for Input As #2 > > Do While Not Eof(#1) > Line Input #1, dummy$ > If dummy$ <> "a" Then Print #1, dummy$ > Loop > > Close #1 > Close #2 > --------------------------------- > > I tried this (and many others!) trick: > > --------------------------------- > stream1 = OpenRead["c:\\myDir\\inputFile.txt"]; > stream2 = OpenWrite["c:\\myDir\\outputFile.txt"]; > While[ > dummy != EndOfFile, > dummy = Read[stream1, "String"]; > If[dummy != "a", Write[stream2, dummy]]; > ] > Close[stream1]; > Close[stream2]; > --------------------------------- > > But it doesn't work: when inputFile is > > a > b > c > d > > outputFile is void, not > > b > c > d > > as expected. > > Plaese can someone help me? > > Thanks for your attention. > Goobye. > Hi, I guess you tried this some times without clearing the value of dummy, which was EndOfFile from the last attempt? The following works: In[1]:= SetDirectory[$HomeDirectory]; In[2]:= !!"inputFile.txt" From In[2]:= a b c d In[3]:= Module[{instream = OpenRead["inputFile.txt"], outstream = OpenWrite["outputFile.txt"], dummy}, While[(dummy = Read[instream, "String"]) =!= EndOfFile, If[dummy =!= "a", Write[outstream, dummy] ] ]; Close /@ {outstream, instream} ]; In[4]:= !!"outputFile.txt" From In[4]:= "b" "c" "d" In[5]:= ResetDirectory[]; Peter