2012-04-30 15 views
-2

私はperlで新しく、私はtxtファイルを処理する問題に直面しています。 それは数日間心配しました。誰かが私に手を差し伸べることを望みます。ここ はTXTです:perlでハッシュを使って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での写真の最初の2種類を維持する必要がありますフォーマット。ありがとうございます。

+0

名前文字通り 'a1.png'、' y2.png'、などはありますか? 'fend.png'に何が起こったのですか? – sarnold

+0

番号部分の自動インクリメントのみ。 'a1.png、a2.png、a3.png'のような名前の写真は一般的な部分を持っています。私は最初の2種類のピクチャが必要です – niejieqiang

+0

ようこそStackOverflow。このサイトは一般的に誤動作しているコードの助けになります。これはほとんどの場合、試行された解決策のいくつかを見たいということを意味します。 SOは「私のためにこのコードを書いてください」というサイトではありません。詳細については、[faq](http://stackoverflow.com/faq)をお読みください。 –

答えて

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 
+0

素晴らしい、ありがとう – niejieqiang

関連する問題