Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Doubt regarding parsing

by toolic (Bishop)
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.

Replies are listed 'Best First'.
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.

      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
      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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://963498]
and the pool shimmers...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2018-03-22 14:30 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (276 votes). Check out past polls.