Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Parsing error

by pryrt (Abbot)
on Jan 30, 2023 at 19:15 UTC ( [id://11150038]=note: print w/replies, xml ) Need Help??


in reply to Parsing error

You said,
open(FH, "<", "SRC185.xlsx" ) or die; ... while (<FH>){ chomp; ...

An XLSX is a binary file. You cannot just read it line-by-line as if it was newline-separated text and assume you're going to get meaningful data. To read through the rows of SRC185.xlsx, I recommend using the Spreadsheet::Read module -- its documentation shows examples of how to use it to read the various cells of your input spreadsheet. (And even if it were a text-based CSV file instead of XLSX, which is newline-separated text, you would have to somehow split the cells apart to become multiple individual pieces of data; and splitting CSV manually is A Bad Idea, so using Spreadsheet::Read or Text::CSV would have been the better choice for parsing even SRC185.csv.)

Also, the Anonymous Monk had good information in these posts.

addenda: BTW: kudos on use strict and use warnings -- however, since you are opening files, I highly recommend meanful error messages: saying open(...) or die; is not a helpful message; using open(...) or die "SRC185.xlsx: $!" is better; but if you 'use autodie; as well, then you don't even need to manually die with a self-crafted error message, so you can just open(...) and be done with it.

Replies are listed 'Best First'.
Re^2: Parsing error
by MoodyDreams999 (Beadle) on Jan 30, 2023 at 21:41 UTC
    I can't use Spreadsheet::Read as I have to input missing zip codes, I didn't see any documentation about writing in that module. Text::CVS I don't really need it to be cvs, I'll check it out, thank you for the help.
      I can't use Spreadsheet::Read as I have to input missing zip codes

      You apparently misunderstood me. I wasn't saying "use Spreadsheet::Read instead of Excel::Writer::XLSX ". I was saying "use Spreadsheet::Read instead of using a manual open and a while(<FH>) loop to read the old spreadsheet in, and continue to use Excel::Writer::XLSX as the way to write your new file out".

      I just brought up Text::CSV (*) because you seemed to be treating the spreadsheet you were reading as a text file, and CSV is the only pure-text spreadsheet format that I know about, so I thought maybe you were confused about file formats. Since your input file is actually named SRC185.xlsx then it is not a CSV file and you cannot use Text::CSV . (*: CSV is a text-based spreadsheet; CVS is a pharmacy chain or a version-control system that served as a precursor to SVN; VCS is the generic abbreviation for version control software; there are too many valid anagrams of that TLA.)

      So in case it wasn't stated succinctly enough yet:

        Thank you for clarifying that for me, we use csv's alot so I may play around with that module here eventually, but for this purpose I don't need to turn it into a cvs yet in the process for convenience. Thats something I will probably be working towards eventually though.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (7)
As of 2024-03-28 19:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found