Friday, 8 August 2014

CSV file : perl read edit and write

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Text::CSV;

my $csv = Text::CSV->new({ binary => 1, auto_diag => 1, sep_char => ','});
my (%hash, %newhash, @fields, $keys_one, $name, $keys_two, $line);

open(my $data, '<:encoding(utf8)', "us_db_csv.csv");

while ($line = $csv->getline($data))
{
  chomp $line;
  if ($line)
  {
    @fields = @$line;
  # next  if ($fields[0] < 40);
    $hash{$fields[0]} = [@fields];
  }
 # last if ($fields[0] > 60);
}

foreach $keys_one (sort {$a <=> $b} keys %hash)
{
#$name=${$hash{$keys_one}}[1];
  foreach $keys_two (sort {$a <=> $b} keys %hash)
  {
    next if (($keys_two <= $keys_one) or (! ${$hash{$keys_one}}[1]));
    if ("${$hash{$keys_one}}[1]" eq "${$hash{$keys_two}}[1]")
    {
      $newhash{$keys_two}=  $hash{$keys_two};
      delete  $hash{$keys_two};
    }
  }
}

close(USDB);
open (USDB, '>us_db_org.csv');

foreach $keys_one (sort {$a <=> $b} keys %hash)
{
  last;
  next if (! @{$hash{$keys_one}}[1]);
  print USDB join("\t", @{$hash{$keys_one}}),"\n";
}

close(USDB);
$csv->eol("\r\n");

close $data;

open $data, ">:encoding(utf8)", "org.csv";

foreach $keys_one (sort {$a <=> $b} keys %hash)
{
  next if (! @{$hash{$keys_one}}[1]);
  $csv->print($data, $hash{$keys_one});
}
close $data;
$csv->eol("\r\n");

open $data, ">:encoding(utf8)", "dup.csv";

foreach $keys_two (sort {$a <=> $b} keys %newhash)
{
  next if (! @{$newhash{$keys_two}}[1]);
  $csv->print($data, $newhash{$keys_two});
}
close $data;
$csv->eol("\r\n");

1;

No comments:

Post a Comment