in reply to Re: Need help with Text::CSV
in thread Need help with Text::CSV

I posted my code as it is. And I got that  $csv->setDelimiter('|'); from http://search.cpan.org/~erangel/Text-CSV/CSV.pm. I posted my requirement above. Is it possible to read a file and group as per my conditions through this module??

Replies are listed 'Best First'.
Re^3: Need help with Text::CSV
by kcott (Archbishop) on Oct 28, 2015 at 06:28 UTC
Re^3: Need help with Text::CSV
by kevbot (Vicar) on Oct 28, 2015 at 06:30 UTC
    The link you posted is to a very old (2006) version of Text::CSV. It was also marked as an UNAUTHORIZED RELEASE. If you are using a more recent version of Text::CSV, the following should work to count the records that satisfy your criteria:
    #!/usr/bin/perl use strict; use warnings; use Text::CSV; my $csv = Text::CSV->new({ sep_char => '|' }); open my $fh, "<", "ravi.csv" or die "ravi.csv: $!"; my $count = 0; while (my $row = $csv->getline($fh)){ my @fields = @{$row}; if($fields[9] eq 'Submit' and $fields[12] eq 'GSM' and $fields[13] + eq 'SMPP'){ ++$count; } } print "Count is: $count\n"; exit;

      Ya I understand my problem now. But I solved this problem earlier in a way.

      foreach my $Postpaid_file (@Postpaid_files) { open (POST ,"$Postpaid_file") or print "cannot open file\n +"; while(my $cdr_post_line = <POST>) { chomp $cdr_post_line; my @cdr_post_array = split(/\|/,$cdr_post_line); if ($cdr_post_array[12] eq "GSM" && $cdr_post_array[9] + eq "Submit") { $cdr_post_MO_cnt++ if any { /^\Q$cdr_post_arra +y[11]\E$/ } @MOresp_error; $Total_GSM_attempts++ unless any { /^\Q$cdr_po +st_array[11]\E$/ } @MOresp_error; } if ($cdr_post_array[12] eq "SMPP" && $cdr_post_array[9 +] eq "Submit" && $cdr_post_array[10] eq "0") { $cdr_post_AO_cnt++; #if any { /^\Q$cdr_post_ +array[11]\E$/ } @MOresp_error; $total_AO_success++ unless any { /^\Q$cdr_post +_array[11]\E$/ } @MOresp_error; $Total_SMPP_attempts++ unless any { /^\Q$cdr_p +ost_array[11]\E$/ } @MOresp_error; } if ($cdr_post_array[12] eq "GSM" && ($cdr_post_array[1 +3] eq "GSM" || $cdr_post_array[13] eq "ESMEGW") && $cdr_post_array[9] + eq "Submit") { $total_MT_P2P++ unless any { /^\Q$cdr_post_arr +ay[11]\E$/ } @MOresp_error; } if ($cdr_post_array[12] eq "GSM" && ($cdr_post_array[1 +3] eq "GSM" || $cdr_post_array[13] eq "ESMEGW") && $cdr_post_array[9] + eq "Submit" && $cdr_post_array[7] eq "Delivered") { $total_MT_P2P_success++; }

      I thought we can do a better code (by not using all if's to check the conditions) using modules. Almost here also we are doing same. Then what's the benefit using this module. Or is there any other way to simpler my code(above mentioned)????

      Update

      The main reason to simplify my code is its become 624 lines which contains mostly if's(nearly one if for every four lines) and to check "eq && eq && eq". Its bulky, error prone & (important one) I dont like this :-)

        I thought we can do a better code (by not using all if's to check the conditions) using modules
        No modules needed. Just use logic and nest/chain the if's:
        for my $Postpaid_file (@Postpaid_files) { open my $POST, $Postpaid_file or die "cannot open $Postpaid_file: +$!\n"; while (my $cdr_post_line = <$POST>) { chomp $cdr_post_line; my @cdr_post_array = split /\|/, $cdr_post_line; if ('Submit' eq $cdr_post_array[9]) { if ('GSM' eq $cdr_post_array[12]) { $cdr_post_MO_cnt++ if any { /^\Q$cdr_post_array[11]\E$ +/ } @MOresp_error; $Total_GSM_attempts++ unless any { /^\Q$cdr_post_array +[11]\E$/ } @MOresp_error; if (any { $_ eq $cdr_post_array[13] } qw( GSM ESMEGW ) +) { $total_MT_P2P++ unless any { /^\Q$cdr_post_array[1 +1]\E$/ } @MOresp_error; $total_MT_P2P_success++ if 'Delivered' eq $cdr_pos +t_array[7]; } } elsif ('SMPP' eq $cdr_post_array[12] && '0' eq $cdr_post +_array[10]) { $cdr_post_AO_cnt++; #if any { /^\Q$cdr_post_array[11 +]\E$/ } @MOresp_error; $total_AO_success++ unless any { /^\Q$cdr_post_array[1 +1]\E$/ } @MOresp_error; $Total_SMPP_attempts++ unless any { /^\Q$cdr_post_arra +y[11]\E$/ } @MOresp_error; } } } }
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ