perlquestion
ei6eqb
Hi All Monks ,
Sorry I have already posted this question in error under Anonymous as I did not realise I was logged out, so here it is again
<p>
I have a daily task to do.</p>
<p> I trying to perform an automatic extraction of data from an input.csv file and save the processed data to output.csv file.</p>
<p>
The input.csv file is created by TAS Books and is of a fixed field format which cannot be modified in any way in Tasbooks.
The output.csv is then sent on to another site for further processing.
</p>
<p>
I tried to do what I required in OpenOffice, but found this had many stages to complete.
</p>
<p>
I have a Perl script which is easier to use which was written for me on a different site
here;- ( https://forum.openoffice.org/en/forum/viewtopic.php?f=5&t=91255&p=432185&hilit=tony+fay&sid=091a3c41d51f30d2fb8570b53ab34218#p432185 0
</p>
<p>
This Perl script, for the most part does what I require.
But there are two functions I would like to have included within the main inputfilescript.pl script file.
</p>
<p>
1. When I run the script on my input.csv file the output.csv file which is created by the script has double quotes in two of the data columns,<br> i.e. the Timestamp field "2018-01-23 00:00" and the ProdDescription field "Acme Widget Large 20 inch"<br>
These double quotes need to be removed to comply with the required data format of the final csv file.<br>
</p>
<p>
At present I remove these double quotation marks from the output.csv file by running the following Perl script in a batch file
after the output.csv file is created. </p>
<code>
PERL -pe "s/\x22//g" output.csv > output2.csv </code>
<p>
( I found this here;- https://stackoverflow.com/questions/22674955/removing-double-quotes-from-a-csv-file ) </p>
<p>
This removes the double quotes from the output.csv file and saves the the file as output2.csv.
</p>
<p>
Note as I'm running my perl scripts in Windows10 and I cannot use the " character directly PERL -pe "s/\"//g" output.csv > output2.csv <br>
so I use x22 = hex for double quotes character in the script.<br>
I would like to have the double quote removal included within the main inputfilescript.pl file
also </p>
<p>
2. As the input.csv files are sent to me with different filenames each day,
I am renaming these to input.csv for processing by the perl inputfilescript.pl script file.
I would like to have the function of the inputfilescript.pl file asking me to type the filenames
for the INPUT.csv file name and an OUTPUT.csv so that I do not have to rename filenames for processing.
</p>
<p>
====
Below are the files I'm Using
====</p>
<p>
My Main Perl Script File inputfilescript.pl</p>
<p>
<readmore>
<code>
use Text::CSV;
my ($in, $out, $csvi, $csvo, $ar, $col, $hri, $hro, $yyyy, $mm, $dd, $code, $desc);
my @hdr = qw(DeviceID PosTxnID MobileNumber Timestamp PosID PosUserID ShopID
Prodcode ProdDescription ProdDept ProdGroup1 ProdGroup2 Qty Value);
my @e14 = ('','','','','','','','','','','','','',''); my $spacer = 0;
# open $in, "<inputnoquotes.csv" or die "inputnoquotes.csv: $!\n";
open $in, "<input.csv" or die "input.csv: $!\n";
$csvi = Text::CSV->new( { binary=>1 } );
open $out, ">output.csv" or die "output.csv: $!\n";
$csvo = Text::CSV->new( { binary=>1, eol=>$/ } );
$ar = $csvi->getline($in); $col = 0;
foreach (@{$ar}) { $_ = "Col$col" if $col>7; s/ //; $col++; }
$csvi->column_names($ar); $csvo->column_names(@hdr); $csvo->print($out,\@hdr);
while ($hri = $csvi->getline_hr($in)) {
if ($hri->{InvDate}) {
($dd,$mm,$yyyy) = split("/",$hri->{InvDate});
$hro = { DeviceID=>$hri->{CustCode}, PosTxnID=>$hri->{InvNum}, MobileNumber=>'',
Timestamp=>$yyyy.'-'.$mm.'-'.$dd.' 00:00', PosID=>'', PosUserID=>'',
ShopID=>'2345', Prodcode=>$code, ProdDescription=>$desc, ProdDept=>'',
ProdGroup1=>'', ProdGroup2=>'', Qty=>$hri->{Qty}, Value=>$hri->{NetAmt} };
if ($spacer) { $csvo->print($out,\@e14); $spacer = 0; }
$csvo->print_hr($out,$hro);
}
elsif ($hri->{CustCode}) { ($code,$desc) = split(' - # ',$hri->{CustCode}); }
elsif ($hri->{LineDisc}) { $spacer = 0; }
}
# original code had { $spacer = 1; } I changed this as my input.csv file originally had a - but now contains - # between the Product code and product description in the input.csv file
</code>
</readmore>
</p>
<p>
==================================================</p>
<p>
Original input.csv file as outputted from TasBooks </P>
<p>
<p>
<readmore>
<code>
"Cust Code","Inv Date","Inv Num","Type","Unit Price","Line Disc","Qty","Net Amt","Cost Amt","Margin","%","Market Code","",
"ZB101 - # Acme Widget Large 20 inch","","","","","","","","","","","","",
"VINT01","23/01/2018",112681,"I",23.50,"",1.00,23.50,"",23.50,"100.00%","DEFAULT","",
"RR01","23/01/2018",112683,"I",23.50,"",2.00,47.00,"",47.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",3.00,70.50,"",70.50,"100.00%","","",
"","","","","","","","","","","","","",
"ZB1201 - # Acme Widget Small 5 inch","","","","","","","","","","","","",
"VINT01","23/01/2018",112681,"I",50.00,"",2.00,100.00,"",100.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,100.00,"",100.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB2101 - # Acme Widget Large 15 inch","","","","","","","","","","","","",
"PIP01","23/01/2018",112670,"I",12.50,"",1.00,12.50,"",12.50,"100.00%","DEFAULT","",
"VINT01","23/01/2018",112681,"I",12.50,"",1.00,12.50,"",12.50,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,25.00,"",25.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB2401 - # Acme Widget Medium 10 inch","","","","","","","","","","","","",
"VCR01","23/01/2018",112674,"I",32.50,"",2.00,65.00,"",65.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,65.00,"",65.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB2501 - # Acme Widget Small 6 inch","","","","","","","","","","","","",
"VINT01","23/01/2018",112681,"I",37.50,"",1.00,37.50,"",37.50,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",1.00,37.50,"",37.50,"100.00%","","",
"","","","","","","","","","","","","",
"ZB3501 - # Acme Widget GOLD","","","","","","","","","","","","",
"CAPB01","23/01/2018",112672,"I",29.00,"",1.00,29.00,"",29.00,"100.00%","DEFAULT","",
"SANML","23/01/2018",112673,"I",29.00,"",1.00,29.00,"",29.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,58.00,"",58.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB3701 - # Acme Widget Large 24 inch","","","","","","","","","","","","",
"RS01","23/01/2018",112657,"I",21.00,"",1.00,21.00,"",21.00,"100.00%","DEFAULT","",
"CAPB01","23/01/2018",112672,"I",21.00,"",1.00,21.00,"",21.00,"100.00%","DEFAULT","",
"BPS01","23/01/2018",112679,"I",21.00,"",2.00,42.00,"",42.00,"100.00%","DEFAULT","",
"VINT01","23/01/2018",112681,"I",21.00,"",1.00,21.00,"",21.00,"100.00%","DEFAULT","",
"MC01","23/01/2018",112682,"I",21.00,"",1.00,21.00,"",21.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",6.00,126.00,"",126.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB3801 - # Regular Acme Widget Large 20 inch","","","","","","","","","","","","",
"PIP01","23/01/2018",112670,"I",21.00,"",1.00,21.00,"",21.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",1.00,21.00,"",21.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB4001 - # High Type Acme Widget","","","","","","","","","","","","",
"RE01","23/01/2018",112663,"I",30.00,"",1.00,30.00,"",30.00,"100.00%","DEFAULT","",
"CAPB01","23/01/2018",112672,"I",30.00,"",1.00,30.00,"",30.00,"100.00%","DEFAULT","",
"APP01","23/01/2018",112685,"I",30.00,"",1.00,30.00,"",30.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",3.00,90.00,"",90.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB401 - # Nugget Type Acme Widget","","","","","","","","","","","","",
"RR01","23/01/2018",112683,"I",24.00,"",2.00,48.00,"",48.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,48.00,"",48.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB4901 - # Acme Widget Large 17 inch","","","","","","","","","","","","",
"TB01","23/01/2018",112665,"I",38.50,"",1.00,38.50,"",38.50,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",1.00,38.50,"",38.50,"100.00%","","",
"","","","","","","","","","","","","",
"ZB501 - # Acme Widget hexangle","","","","","","","","","","","","",
"DD01","23/01/2018",112659,"I",33.00,"",3.00,99.00,"",99.00,"100.00%","DEFAULT","",
"VINT01","23/01/2018",112681,"I",33.00,"",1.00,33.00,"",33.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",4.00,132.00,"",132.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB701 - # Acme Widget Circular 20 inch","","","","","","","","","","","","",
"RS01","23/01/2018",112657,"I",33.00,"",1.00,33.00,"",33.00,"100.00%","DEFAULT","",
"PIP01","23/01/2018",112670,"I",33.00,"",1.00,33.00,"",33.00,"100.00%","DEFAULT","",
"BPS01","23/01/2018",112679,"I",33.00,"",1.00,33.00,"",33.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",3.00,99.00,"",99.00,"100.00%","","",
"","","","","","","","","","","","","",
"ZB901 - # Acme Widget Square 3 inch","","","","","","","","","","","","",
"RE01","23/01/2018",112663,"I",32.00,"",1.00,32.00,"",32.00,"100.00%","DEFAULT","",
"TB01","23/01/2018",112665,"I",32.00,"",1.00,32.00,"",32.00,"100.00%","DEFAULT","",
"","","","","","","––––––","–––––––––","–––––––––","–––––––––","–––––––","","",
"","","","","","Product Totals:",2.00,64.00,"",64.00,"100.00%","","",
"","","","","","","","","","","","","",
␚
</code>
</readmore>
</p>
</p>
<p>
=============================================</p>
<p>
This is the format of the OUTPUT.CSV file I require </p>
<code>
DeviceID,PosTxnID,MobileNumber,Timestamp,PosID,PosUserID,ShopID,Prodcode,ProdDescription,ProdDept,ProdGroup1,ProdGroup2,Quantity,Value
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,,,,,,,,,,
</code>
<p>
Source Data criteria;</p>
<p>
The only fields I need from the original input.csv file are Cust Code, Inv Date, Inv Num , Qty , Net Amt. </p>
<p>
I also need the values from Row 2 which contains my Prodcode and my ProdDiscription values in my output.csv file,<br>
these values also occur every time the product code changes in the file </p>
<p>
i.e<br>
"ZB101" = Prodcode and "- # Acme Widget Large 20 inch" = ProdDiscription<br>
"ZB1201" = Prodcode and " - # Acme Widget Small 5 inch" = ProdDiscription<br>
"ZB2101" = Prodcode and " - # Acme Widget Large 15 inch" = ProdDiscription etc. etc.<br>
<br>
Also
<br>
Discard the rows with the following values;</p>
<code>
,,,,,,––––––,–––––––––,–––––––––,–––––––––,–––––––,<
,,,,,Product Totals:,3,70.5,,70.5,100.00%,
,,,,,,,,,,,
And
,,,,,,––––––,–––––––––,–––––––––,–––––––––,–––––––,
,,,,,Product Totals:,2,100,,100,100.00%,
,,,,,,,,,,,
</code>
<p>etc, etc.</p>
<p>
These are the fields I Need in my output.csv file with the 5 field values from the input.csv file
</p>
</p>
OUTPUT.CSV = INPUT.CSV<br>
---------- -----------<br>
DeviceID = Cust Code (from input.csv)<br>
PosTxnID = Inv Num (from input.csv)<br>
MobileNumber = , (note; these are empty fields)<br>
Timestamp = Inv Date (from input.csv) (The output.csv format required is "YYYY-MM-DD hh:mm" Where hh:mm is always 00:00)<br>
PosID = ,<br>
PosUserID = ,<br>
ShopID = 2345 (static string value of 2345 for all rows with data, no source from input.csv file)<br>
Prodcode = ZB???? The code at beginning of Row2 and at other variable occurrences within the csv file<br>
ProdDiscription = "- #text string " after the ZB??? Prodcode in Row 2 and at other occurences within the csv file. Note the "- #" removed when the split occurs<br>
ProdDept = ,<br>
ProdGroup1 = ,<br>
ProdGroup2 = ,<br>
Quantity = QTY<br>
Value = Net Amt<br>
<p>
============================================== <br>
The output.csv file is created as below by the inputfilescript.pl <br>
============================================== </p>
output.csv file <br>
<p>
<readmore>
<code>
DeviceID,PosTxnID,MobileNumber,Timestamp,PosID,PosUserID,ShopID,Prodcode,ProdDescription,ProdDept,ProdGroup1,ProdGroup2,Qty,Value
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB101,"Acme Widget Large 20 inch",,,,1.00,23.50
RR01,112683,,"2018-01-23 00:00",,,2345,ZB101,"Acme Widget Large 20 inch",,,,2.00,47.00
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB1201,"Acme Widget Small 5 inch",,,,2.00,100.00
PIP01,112670,,"2018-01-23 00:00",,,2345,ZB2101,"Acme Widget Large 15 inch",,,,1.00,12.50
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB2101,"Acme Widget Large 15 inch",,,,1.00,12.50
VCR01,112674,,"2018-01-23 00:00",,,2345,ZB2401,"Acme Widget Medium 10 inch",,,,2.00,65.00
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB2501,"Acme Widget Small 6 inch",,,,1.00,37.50
CAPB01,112672,,"2018-01-23 00:00",,,2345,ZB3501,"Acme Widget GOLD",,,,1.00,29.00
SANML,112673,,"2018-01-23 00:00",,,2345,ZB3501,"Acme Widget GOLD",,,,1.00,29.00
RS01,112657,,"2018-01-23 00:00",,,2345,ZB3701,"Acme Widget Large 24 inch",,,,1.00,21.00
CAPB01,112672,,"2018-01-23 00:00",,,2345,ZB3701,"Acme Widget Large 24 inch",,,,1.00,21.00
BPS01,112679,,"2018-01-23 00:00",,,2345,ZB3701,"Acme Widget Large 24 inch",,,,2.00,42.00
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB3701,"Acme Widget Large 24 inch",,,,1.00,21.00
MC01,112682,,"2018-01-23 00:00",,,2345,ZB3701,"Acme Widget Large 24 inch",,,,1.00,21.00
PIP01,112670,,"2018-01-23 00:00",,,2345,ZB3801,"Regular Acme Widget Large 20 inch",,,,1.00,21.00
RE01,112663,,"2018-01-23 00:00",,,2345,ZB4001,"High Type Acme Widget",,,,1.00,30.00
CAPB01,112672,,"2018-01-23 00:00",,,2345,ZB4001,"High Type Acme Widget",,,,1.00,30.00
APP01,112685,,"2018-01-23 00:00",,,2345,ZB4001,"High Type Acme Widget",,,,1.00,30.00
RR01,112683,,"2018-01-23 00:00",,,2345,ZB401,"Nugget Type Acme Widget",,,,2.00,48.00
TB01,112665,,"2018-01-23 00:00",,,2345,ZB4901,"Acme Widget Large 17 inch",,,,1.00,38.50
DD01,112659,,"2018-01-23 00:00",,,2345,ZB501,"Acme Widget hexangle",,,,3.00,99.00
VINT01,112681,,"2018-01-23 00:00",,,2345,ZB501,"Acme Widget hexangle",,,,1.00,33.00
RS01,112657,,"2018-01-23 00:00",,,2345,ZB701,"Acme Widget Circular 20 inch",,,,1.00,33.00
PIP01,112670,,"2018-01-23 00:00",,,2345,ZB701,"Acme Widget Circular 20 inch",,,,1.00,33.00
BPS01,112679,,"2018-01-23 00:00",,,2345,ZB701,"Acme Widget Circular 20 inch",,,,1.00,33.00
RE01,112663,,"2018-01-23 00:00",,,2345,ZB901,"Acme Widget Square 3 inch",,,,1.00,32.00
TB01,112665,,"2018-01-23 00:00",,,2345,ZB901,"Acme Widget Square 3 inch",,,,1.00,32.00
</code>
</readmore>
</p>
============================================= <br>
Note the " characters in the fields for Timestamp and ProdDescription above . <br>
<p>
Then after running the second script to remove the double quotes; <br>
PERL -pe "s/\x22//g" output.csv > output2.csv
We get the output2.csv file below in the final file format required,<br>
ready for sending on for the next process;- </p>
<p> ========================================= </p>
output2.csv file <br
<p>
<readmore>
<code>
DeviceID,PosTxnID,MobileNumber,Timestamp,PosID,PosUserID,ShopID,Prodcode,ProdDescription,ProdDept,ProdGroup1,ProdGroup2,Qty,Value
VINT01,112681,,2018-01-23 00:00,,,2345,ZB101,Acme Widget Large 20 inch,,,,1.00,23.50
RR01,112683,,2018-01-23 00:00,,,2345,ZB101,Acme Widget Large 20 inch,,,,2.00,47.00
VINT01,112681,,2018-01-23 00:00,,,2345,ZB1201,Acme Widget Small 5 inch,,,,2.00,100.00
PIP01,112670,,2018-01-23 00:00,,,2345,ZB2101,Acme Widget Large 15 inch,,,,1.00,12.50
VINT01,112681,,2018-01-23 00:00,,,2345,ZB2101,Acme Widget Large 15 inch,,,,1.00,12.50
VCR01,112674,,2018-01-23 00:00,,,2345,ZB2401,Acme Widget Medium 10 inch,,,,2.00,65.00
VINT01,112681,,2018-01-23 00:00,,,2345,ZB2501,Acme Widget Small 6 inch,,,,1.00,37.50
CAPB01,112672,,2018-01-23 00:00,,,2345,ZB3501,Acme Widget GOLD,,,,1.00,29.00
SANML,112673,,2018-01-23 00:00,,,2345,ZB3501,Acme Widget GOLD,,,,1.00,29.00
RS01,112657,,2018-01-23 00:00,,,2345,ZB3701,Acme Widget Large 24 inch,,,,1.00,21.00
CAPB01,112672,,2018-01-23 00:00,,,2345,ZB3701,Acme Widget Large 24 inch,,,,1.00,21.00
BPS01,112679,,2018-01-23 00:00,,,2345,ZB3701,Acme Widget Large 24 inch,,,,2.00,42.00
VINT01,112681,,2018-01-23 00:00,,,2345,ZB3701,Acme Widget Large 24 inch,,,,1.00,21.00
MC01,112682,,2018-01-23 00:00,,,2345,ZB3701,Acme Widget Large 24 inch,,,,1.00,21.00
PIP01,112670,,2018-01-23 00:00,,,2345,ZB3801,Regular Acme Widget Large 20 inch,,,,1.00,21.00
RE01,112663,,2018-01-23 00:00,,,2345,ZB4001,High Type Acme Widget,,,,1.00,30.00
CAPB01,112672,,2018-01-23 00:00,,,2345,ZB4001,High Type Acme Widget,,,,1.00,30.00
APP01,112685,,2018-01-23 00:00,,,2345,ZB4001,High Type Acme Widget,,,,1.00,30.00
RR01,112683,,2018-01-23 00:00,,,2345,ZB401,Nugget Type Acme Widget,,,,2.00,48.00
TB01,112665,,2018-01-23 00:00,,,2345,ZB4901,Acme Widget Large 17 inch,,,,1.00,38.50
DD01,112659,,2018-01-23 00:00,,,2345,ZB501,Acme Widget hexangle,,,,3.00,99.00
VINT01,112681,,2018-01-23 00:00,,,2345,ZB501,Acme Widget hexangle,,,,1.00,33.00
RS01,112657,,2018-01-23 00:00,,,2345,ZB701,Acme Widget Circular 20 inch,,,,1.00,33.00
PIP01,112670,,2018-01-23 00:00,,,2345,ZB701,Acme Widget Circular 20 inch,,,,1.00,33.00
BPS01,112679,,2018-01-23 00:00,,,2345,ZB701,Acme Widget Circular 20 inch,,,,1.00,33.00
RE01,112663,,2018-01-23 00:00,,,2345,ZB901,Acme Widget Square 3 inch,,,,1.00,32.00
TB01,112665,,2018-01-23 00:00,,,2345,ZB901,Acme Widget Square 3 inch,,,,1.00,32.00
</code>
</readmore>
</p>
<p>
=========================================== </p>
<p>
My Knowledge of Perl is very limited;
I have tried to use the following changes in the modified script file inputfilescriptmods.pl below,<br>
but I then get errors for getline which is out of my depth.
</p>
<code>
C:\SCRIPTS-PERL>perl inputfilescriptmods.pl
Enter the name of the file to read: input.csv
Enter the name of the file to write: output.csv
Can't locate object method "getline" via package "input.csv" (perhaps you forgot to load "input.csv"?) at inputfilescriptmods.pl line 36, <STDIN> line 2.
C:\SCRIPTS-PERL>
</code>
<p>
================================================ </p>
<p>
These are the modifications I have added to the inputfiescript.pl to ask for filenames, which causes the above error report.
</p>
<p>
<readmore>
<code>
# grab user input..
print "Enter the name of the file to read: ";
my $filetoread = <STDIN>;
chomp($filetoread);
print "Enter the name of the file to write: ";
my $filetowrite = <STDIN>;
chomp($filetowrite);
# ****print "Enter the name of the output file: ";
# ****my $fileoutput = <STDIN>;
# ****chomp($fileoutput);
# ****open $in, "<inputnoquotes.csv" or die "inputnoquotes.csv: $!\n";
open my $readhandle, '<', $filetoread or die "Unable to read [$filetoread]!";
# open $in, "<input.csv" or die "input.csv: $!\n";
$csvi = Text::CSV->new( { binary=>1 } );
open my $writehandle, '>', $filetowrite or die "Unable to write [$filetoread]!";
# ****open $out, ">output.csv" or die "output.csv: $!\n";
$csvo = Text::CSV->new( { binary=>1, eol=>$/ } );
$ar = $csvi->getline($filetoread); $col = 0;
# ****$ar = $csvi->getline($in); $col = 0;
foreach (@{$ar}) { $_ = "Col$col" if $col>7; s/ //; $col++; }
$csvi->column_names($ar); $csvo->column_names(@hdr); $csvo->print($out,\@hdr);
while ($hri = $csvi->getline_hr($in)) {
if ($hri->{InvDate}) {
($dd,$mm,$yyyy) = split("/",$hri->{InvDate});
$hro = { DeviceID=>$hri->{CustCode}, PosTxnID=>$hri->{InvNum}, MobileNumber=>'',
Timestamp=>$yyyy.'-'.$mm.'-'.$dd.' 00:00', PosID=>'', PosUserID=>'',
ShopID=>'2345', Prodcode=>$code, ProdDescription=>$desc, ProdDept=>'',
ProdGroup1=>'', ProdGroup2=>'', Qty=>$hri->{Qty}, Value=>$hri->{NetAmt} };
if ($spacer) { $csvo->print($out,\@e14); $spacer = 0; }
$csvo->print_hr($out,$hro);
}
elsif ($hri->{CustCode}) { ($code,$desc) = split(' - # ',$hri->{CustCode}); }
elsif ($hri->{LineDisc}) { $spacer = 0; }
}
# Original code had { $spacer = 1; } I changed this as my input.csv file originally had a - but then started arriving with - # between the Product code and product description in the input.csv file
</code>
</readmore>
</p>
<p>
Any help re including the removal of the double quotes characters within the inputfilescript.pl file <br>
and also including the script asking for the inputfilename and outputfilenames to process would be greatly appreciated.<br>
</p>
<p>
Sorry for the long post, I included all files used in the process for clarity, for anyone following the process. </p>
<p>
Regards, Tony
</p>