+ -
当前位置:首页 → 问答吧 → [求助]有关两个csv文件的比较

[求助]有关两个csv文件的比较

时间:2010-09-20

来源:互联网

我现在要比较两个CSV文件,我是利用Text::CSV_XS模块来比较的 我的代码如下
  1. #!/usr/bin/perl
  2. use Text::CSV_XS;
  3. my $csvfile="file1.csv";
  4. my $newfile="file2.csv";
  5. open $old, "<", $csvfile;
  6. open $new, "<", $newfile;
  7. open DIFF, ">", "diff.txt";
  8. my $csvold = Text::CSV_XS->new ({ binary => 1, eol => $/ });
  9. my $csvnew = Text::CSV_XS->new ({ binary => 1, eol => $/ });
  10. my $count=0;
  11. while(my $rowold=$csvold->getline($old))
  12. {
  13. my @item1 = @$rowold;
  14. my @item2;
  15. my @tt;
  16. my $line2;
  17. my @t = @item1;
  18. my $line = shift @item1;
  19. $line = shift @item1;
  20. # print DIFF "$line\t";
  21. while(my $rownew=$csvnew->getline($new))
  22.   {
  23.    @item2 = @$rownew;
  24.    @tt = @item2;
  25.    $line2 = shift @item2;
  26.    $line2 = shift @item2;
  27. #  print DIFF "$line2\n";
  28.   if($line == $line2)
  29.     {

  30.     $count=$count + 1;
  31.      @t="";
  32.      $line="";
  33.     last;
  34.     }
  35.   }
  36. if($line =~ /^\w+/)
  37.   {
  38.   print DIFF "@t\n";
  39.   }

  40. }
复制代码
我的要比较的两个文件在附件里
我是根据CSV文件中的第二列数据进行比较  把FILE1中有的,而FILE2中没有的行提取出来,但是始终不能做到  有没有高人帮我解答下啊?谢谢啦

file1andfile2.rar (13.75 KB)

下载次数:3

2010-09-20 10:58

作者: scrit   发布时间: 2010-09-20

感觉你的代码写的有点乱,先理清头绪再写吧~

看下这都写重复了,还反复的从一个数组到另一个数组,看不明白啥意图~



QUOTE:
@item2 = @$rownew;

   @tt = @item2;

   $line2 = shift @item2;

   $line2 = shift @item2;

作者: x9x9   发布时间: 2010-09-20

不用那么复杂,类似于awk这种写法

perl -F',' -ane 'if ($ARGV eq "file2.csv"){$file{$F[1]}="";next}print  if not exists $file{$F[1]}' file2.csv file1.csv

作者: 99超人   发布时间: 2010-09-20

回复 x9x9


    这是因为我需要根据csv中的第二列数据来匹配的  所以执行了两次

作者: scrit   发布时间: 2010-09-20

回复 99超人


    两个文件中的 其他列的数据会有不同的 ,如果直接按行匹配是不行的, 第一列是所引字段,第二列才是比较字段的

作者: scrit   发布时间: 2010-09-20

HASH,用第二列作为HASH的KEY。

作者: iamlimeng   发布时间: 2010-09-20

  我的程序这么混乱吗?郁闷,超人的方法很好

作者: scrit   发布时间: 2010-09-20