Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Doubt regarding parsing

by toolic (Chancellor)
on Apr 04, 2012 at 18:04 UTC ( #963498=note: print w/ replies, xml ) Need Help??


in reply to Doubt regarding parsing

Tip #2 from the Basic debugging checklist: print

use Spreadsheet::ParseExcel; my $filename = shift || "C:\Earthlink.xls"; print "$filename\n"; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse("$filename"); if ( !defined $workbook ) { die $parser->error(), ".\n"; }

This prints:

C:arthlink.xls File not found.

Use single quotes to prevent interpolation of \E:

my $filename = shift || 'C:\Earthlink.xls';

A good text editor with syntax highlighting is also helpful in distinguishing literal strings from escape sequences.


Comment on Re: Doubt regarding parsing
Select or Download Code
Re^2: Doubt regarding parsing
by pavanpvss (Novice) on Apr 04, 2012 at 18:30 UTC
    use Spreadsheet::ParseExcel; my $filename = shift || 'c:\\Earthlink.xls'; my $parser = Spreadsheet::ParseExcel->new(); print $filename; my $workbook = $parser->parse($filename); if ( !defined $workbook ) { die $parser->error(), ".\n"; }
    I am still getting the message as file not found.
      Copy and paste the exact line that I showed. You have an extra \

      Why have you changed the single backslash to a double backslash?

      Update: oops, too late...

        use Spreadsheet::ParseExcel; my $filename = shift || 'C:\Earthlink.xls'; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse($filename); if ( !defined $workbook ) { die $parser->error(), ".\n"; }

        I have done exactly as you have told. But still i find the error "File Not found" . I have cross checked whether i have put the file in C:\ or not. I have done that. Can you please help me out. Thanks in advance

      The double \\ is always OK (although in single quotes it is often redundant). That is not your problem now, and maybe never was. If you are passing a file name on the command line then the default file name is irrelevant. As a sanity check you should:

      die "Can't find $filename\n" if ! -f $filename;

      before the parse line. Note that -f tests for the existence of a file so the die will happen if the file is missing, even if there is a directory of that name.

      Most likely you are passing a file name for a file that exists in a different directory than is the current directory when you run the script. The die line will detect and report that.

      Note that strictures (use strict; use warnings;) pick up bad escape sequences and would often catch your initial error (although not \E). You should always use strictures.

      True laziness is hard work

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://963498]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (10)
As of 2014-07-22 10:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (109 votes), past polls