Try
#!/usr/bin/perl
use strict;
use Text::CSV;
my @hdr = qw(
DeviceID PosTxnID MobileNumber Timestamp PosID PosUserID ShopID
Prodcode ProdDescription ProdDept ProdGroup1 ProdGroup2 Qty Value);
my @e14 = ('','','','','','','','','','','','','','');
my $spacer = 0;
# 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);
open my $fh_read, '<', $filetoread
or die "Unable to read [$filetoread] : $!";
my $csvi = Text::CSV->new( { binary=>1 } );
open my $fh_write, '>', $filetowrite
or die "Unable to write [$filetowrite] : $!";
my $csvo = Text::CSV->new( { binary=>1, eol=>$/, quote_space => 0} );
my $ar = $csvi->getline($fh_read);
s/ //g for @$ar;
$csvi->column_names($ar);
$csvo->column_names(@hdr);
$csvo->print($fh_write,\@hdr);
my ($code,$desc);
print "Reading file $filetoread\n";
while (my $hri = $csvi->getline_hr($fh_read)) {
if ($hri->{InvDate}) {
my ($dd,$mm,$yyyy) = split "/",$hri->{InvDate};
my $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($fh_write,\@e14);
$spacer = 0;
}
$csvo->print_hr($fh_write,$hro);
}
elsif ($hri->{CustCode}) {
($code,$desc) = split ' - # ',$hri->{CustCode};
}
elsif ($hri->{LineDisc}) {
$spacer = 0;
}
}
close $fh_read;
close $fh_write;
print "Created file $filetowrite\n";
poj