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