Since being informed about
Text::XSV, in such circumstances, I tend to use nothing else but it:
use warnings;
use strict;
use Text::xSV;
my $csv = Text::xSV->new(fh => *DATA, row_size_warning => undef);
while (my $row = $csv->get_row()) {
my @prefix = splice @$row, 0, 3;
foreach (@$row) {
print join ',', @prefix, $_ . "\n";
}
}
__DATA__
1401,PERISH STORE INV,Quarterly,(V) INV810 USER NAME (EDIT REPORT IF 0
+5309 PRSH INV),EXTRACT WAS RUN),(V) INV820 USER NAME (PERISHABLE INVE
+NTORY REPORT),(VTD8) D:\DEPT\ACCT\MAIL\INV820.DAT,(V) INV820C USER NA
+ME (PERISHABLE INVENTORY-BAKERY),(QUARTERLY RUN ONLY)
1402,PERSH INV BOOKS,Quarterly,(V) INV805 58 COPIES - USER NAME,(V) IN
+V805 2 COPIES - USER NAME,(V) INV805A XTRA COPIES-SAVE IN COMPUTER RO
+OM,ANNUAL STORE INVENTORY ONLY:,(V) INV805 58 COPIES - USER NAME,(V)
+INV805 2 COPIES - USER NAME,(V) INV805A XTRA COPIES-SAVE IN COMPUTER
+ROOM
1403,BAKERY INV BOOKS,Quarterly,(V) INV805 35 COPIES - USER NAME,(V) I
+NV805A 5 COPIES - SAVE IN COMPUTER ROOM,ANNUAL STORE INVENTORY ONLY:,
+(J) INV805 35 COPIES - USER NAME,(J) INV805A 5 COPIES - SAVE IN COMPU
+TER ROOM
1501,INV PRICE GUIDE,As Needed,(V) MSC052 BOTH COPIES ARE TO BE PUT IN
+ BINDERS AND,AND LEFT ON THE CABINETS BEHIND THE DP,SECRETARY'S DESK
Which is, IMHO, not too unreadable (:-D) and when run, gives:
$ perl tst.pl
1401,PERISH STORE INV,Quarterly,(V) INV810 USER NAME (EDIT REPORT IF 0
+5309 PRSH INV)
1401,PERISH STORE INV,Quarterly,EXTRACT WAS RUN)
1401,PERISH STORE INV,Quarterly,(V) INV820 USER NAME (PERISHABLE INVEN
+TORY REPORT)
1401,PERISH STORE INV,Quarterly,(VTD8) D:\DEPT\ACCT\MAIL\INV820.DAT
1401,PERISH STORE INV,Quarterly,(V) INV820C USER NAME (PERISHABLE INVE
+NTORY-BAKERY)
1401,PERISH STORE INV,Quarterly,(QUARTERLY RUN ONLY)
1402,PERSH INV BOOKS,Quarterly,(V) INV805 58 COPIES - USER NAME
1402,PERSH INV BOOKS,Quarterly,(V) INV805 2 COPIES - USER NAME
1402,PERSH INV BOOKS,Quarterly,(V) INV805A XTRA COPIES-SAVE IN COMPUTE
+R ROOM
1402,PERSH INV BOOKS,Quarterly,ANNUAL STORE INVENTORY ONLY:
1402,PERSH INV BOOKS,Quarterly,(V) INV805 58 COPIES - USER NAME
1402,PERSH INV BOOKS,Quarterly,(V) INV805 2 COPIES - USER NAME
1402,PERSH INV BOOKS,Quarterly,(V) INV805A XTRA COPIES-SAVE IN COMPUTE
+R ROOM
1403,BAKERY INV BOOKS,Quarterly,(V) INV805 35 COPIES - USER NAME
1403,BAKERY INV BOOKS,Quarterly,(V) INV805A 5 COPIES - SAVE IN COMPUTE
+R ROOM
1403,BAKERY INV BOOKS,Quarterly,ANNUAL STORE INVENTORY ONLY:
1403,BAKERY INV BOOKS,Quarterly,(J) INV805 35 COPIES - USER NAME
1403,BAKERY INV BOOKS,Quarterly,(J) INV805A 5 COPIES - SAVE IN COMPUTE
+R ROOM
1501,INV PRICE GUIDE,As Needed,(V) MSC052 BOTH COPIES ARE TO BE PUT IN
+ BINDERS AND
1501,INV PRICE GUIDE,As Needed,AND LEFT ON THE CABINETS BEHIND THE DP
1501,INV PRICE GUIDE,As Needed,SECRETARY'S DESK
Update:
In retrospect i.e. whilst watching my daughter learning to swim, it occurred to me that I probably ought to recommend the use of the print() &/or print_row() methods (of Text::xSV) to generate the output.
A user level that continues to overstate my experience :-))
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.