如何在perl中使用hash切割文本?

时间:2012-04-30 00:05:57

标签: perl hash text-files

我是perl的新手,我遇到了处理txt文件的问题, 它让我担心了好几天。我希望有人能帮助我。 这是txt:

AA=a1.png,a2.png,a3.png,b1.png,b2.png,b3.png,fend.png
FF=k1.png,k2.png,k3.png,l1.png,l2.bmp,l3.png
OO=p1.png,y1.png,ul23.bmp
ZZ=i1.png,j1.png

我想成为:

AA=a1.png,a2.png,a3.png
AA=b1.png,b2.png,b3.png
FF=k1.png,k2.png,k3.png
FF=l1.png,l2.bmp,l3.png
OO=p1.png
OO=y1.png
ZZ=i1.png
ZZ=j1.png

也就是说,我需要截断最后一类图片,并将前两种图片保持为1比1的格式。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

my $data = <<'EOD'
AA=a1.png,a2.png,a3.png,b1.png,b2.png,b3.png,fend.png
FF=k1.png,k2.png,k3.png,l1.png,l2.bmp,l3.png
OO=p1.png,y1.png,ul23.bmp
ZZ=i1.png,j1.png
EOD
;

my $last_letter = "";
my $newline = "";
foreach my $line (split(/\n/, $data)) {
    my ($var, $vals) = split("=", $line);
    foreach my $val (split(",", $vals)) {
        $val =~ /^(.)(\d+\..+)$/;
        next unless ($1 && $2);
        if ($last_letter eq $1) {
            print ",";
        } else {
            print "$newline$var=";
            $newline = "\n";
            $last_letter = $1;
        }
        print $val;
    }
}
print "\n";

结果:

AA=a1.png,a2.png,a3.png
AA=b1.png,b2.png,b3.png
FF=k1.png,k2.png,k3.png
FF=l1.png,l2.bmp,l3.png
OO=p1.png
OO=y1.png
ZZ=i1.png
ZZ=j1.png