Hi zusammen,
ich bräucht mal eine Anregung wie ich da an die
Aufgabe rangehen könnte.
Mein File:
####
cat=111,blablabla
blablabla
blablabla
ID=xxx;blablabla
cat=113,blablabla
blablabla
cat=123,blablabla
blablabla
ID=yyy,blablabla
cat=12,blablabla
blablabla
blablabla
ID=aaa,blablabla
cat=841,blablabla
blablabla
blablabla
ID=xxx,blablabla
cat=111,blablabla
blablabla
blablabla
ID=yyy,blablabla
.
.
.
###
Und folgende Ausgabe möchte ich haben:
ID=xxx - cat=111 : cat=841
ID=yyy - cat=113 : cat=123 : cat=111
ID=aaa - cat=12
Diese Abschnittstrenner ist immer eine Leerzeiler. Und in jedem Abschnitt ist quasi die ID eindeutig.
Jemand ne Idee?
ciao,
vic
User since
2003-08-04
14371
Artikel
ModeratorIn
Ein kleiner Fehler war drin. So sollte es funktionieren:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;
my $file = '/path/to/file.txt';
my %hash;
{
local $/ = "\n\n";
open my $fh, '<', $file or die $!;
while( my $entry = <$fh> ){
my @cats = $entry =~ /(cat=\d+)/g;
my ($id) = $entry =~ /(ID=[^,;]+)/;
next unless $id;
push @{ $hash{$id} }, @cats;
}
}
for my $key ( keys %hash ){
print $key, " - " , join(" : ", @{ $hash{$key} }),"\n";
}
\n\n
<!--EDIT|renee|1183625437-->