Ok perlers, It was actually fairly easy.
I added a delete just before the end of the for loop.
delete $oBook->{Worksheet};
Not sure how the references work internally in Perl. I guess that
when oBook is assigned a new Spreadsheet the previous Spreadsheet is
not getting cleaned up.
Cheers,
On 4/27/05, Craig Moynes <[EMAIL PROTECTED]> wrote:
> Hi Gents,
> I tried both suggestions:
>
> #
> # For each log in the array
> # - grab the directory and name of the file.
> # - send via sendmail
> #
> foreach $hashEntry ( @LOGS )
> {
>
> my ( $localfile) = $hashEntry->{name};
> my ( $err_msg ) = ""; # error message variable
>
> my $cmd = "";
>
> #
> # Get row count of each file, to generate results file
> #
> my $oBook = new Spreadsheet::ParseExcel::Workbook->Parse($localfile);
> my $oWkS = ${$oBook->{Worksheet}}[0];
>
> print "------ SHEET: ".$oWkS->{Name}. "\n";
> print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n";
>
> $resultMessage.=sprintf("%s,%s\n",basename($localfile),$oWkS->{MaxRow});
> }
>
> But I still get an out of memory error on the 10th file opened.
>
> Any additional suggestions?
>
> On 4/27/05, Bakken, Luke <[EMAIL PROTECTED]> wrote:
> > > my $oBook;
> > > my $oWks;
> > > foreach $hashEntry ( @LOGS )
> > > {
> > >
> > > my ( $localfile) = $hashEntry->{name};
> > > my ( $err_msg ) = ""; # error message
> > > variable
> > >
> > >
> > > my $cmd = "";
> > >
> > > #
> > > # Get row count of each file, to generate results file
> > > #
> > > $oBook = new
> > > Spreadsheet::ParseExcel::Workbook->Parse($localfile); my
> > > ($iR, $iC, $oWkS, $oWkC); $oWkS = ${$oBook->{Worksheet}}[0];
> > >
> > > print "------ SHEET: ".$oWkS->{Name}. "\n";
> > > print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n";
> > >
> > > $resultMessage.=basename($localfile).",".$oWkS->{MaxRow}."\n"; }
> > >
> > > The problem I am running into is after 10 files (in testing all 31
> > > files are the same source file with different names), and then I get
> > > an out of memory error. Anyone have any idea how I can clean out the
> > > memory. I have a feeling it might be some autocaching or something
> > > not getting cleaned up within ParseExcel.
> >
> > If you move the 'my $oBook' inside the for loop it the object should be
> > destroyed on each iteration:
> >
> > for my $hashEntry ( @LOGS )
> > {
> >
> > my ( $localfile) = $hashEntry->{name};
> > my ( $err_msg ) = ""; # error message
> > variable
> >
> > my $cmd = "";
> >
> > #
> > # Get row count of each file, to generate results file
> > #
> > my $oBook = new
> > Spreadsheet::ParseExcel::Workbook->Parse($localfile);
> > my ($iR, $iC, $oWkC);
> > my $oWkS = ${$oBook->{Worksheet}}[0];
> >
> > print "------ SHEET: ".$oWkS->{Name}. "\n";
> > print "Row: ".$oWkS->{MinRow}." v ".$oWkS->{MaxRow}."\n";
> >
> > $resultMessage.=basename($localfile).",".$oWkS->{MaxRow}."\n";
> > }
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <http://learn.perl.org/> <http://learn.perl.org/first-response>
> >
> >
>
--
Primer:
Shane Carruth: It's about some engineers that are trying to build a
device that "degrades" gravity. They find out it has unexplainable
properties. Hilarity ensues.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>