Gå til innhold

Mønstergjenkjenning til besvær


Anbefalte innlegg

Har da en kodesnutt som jeg er litt vel lei av nu.

 

Og siden det er så lite liv her, får jeg vel poste som en "postcount whore in heat", for å dra litt liv igang. *grin*

 

Her er da kodesnutten:

.
.
.
 foreach my $key (sort keys %albumPatterns) {
 	$_ = $entries{$line}[0]->{album};
 	if (eval "s/$key/$albumPatterns{$key}/") {
   #print "OLD: '", $entries{$line}[0]->{album}, "'\n";
   $entries{$line}[0]->{changedalbum} = $_;
   $entries{$line}[0]->{patternmatched} = $key . "\t" . $albumPatterns{$key};
   $albumPatterns{$key}[0]->{count} += 1;
   #print "NEW: '", $entries{$line}[0]->{changedalbum}, "'\n";
 	}
 }
 #print $entries{$line}[0]->{artist}, "\t", $entries{$line}[0]->{album}, "\n";
}
}

sub print_out {
my %matches;
foreach my $key (sort keys %entries) {
 @{$temp{$key}};
 my $rec = {
 	artist => $entries{$key}[0]->{artist},
 	album => $entries{$key}[0]->{album},
 	changedartist => $entries{$key}[0]->{changedartist},
 	changedalbum => $entries{$key}[0]->{changedalbum}
 };
 push @{$matches{$entries{$key}[0]->{patternmatched}}}, $rec;
 #print "Key: ", $key, " artist: ", $entries{$key}[0]->{artist}, "\n";
}
foreach my $key (sort keys %matches) {
 print scalar @{$matches{$key}}, "\n";
 #print "Test array: ", $matches{$key}[3]->{album}, "\n";
 foreach my $element (scalar @{$matches{$key}} - 1) {
 	print "Original entry: '", $matches{$key}[$element]->{album}, 
   "'\nPattern matched: '", $key, 
   "'\nChanged entry: '", $matches{$key}[$element]->{changedalbum}, "'\n";
 }
}
}

 

Problemet her er at jeg ser ut til å ha mistet oversikten over ting og tang.

Uansett, linja "print scalar @{$matches{$key}}, "\n";" gir meg som svar at jeg har 10 matcher i tekstfila som jeg matcher med mønstrene (koden er vel ellers klar), men "print "Original entry: '", ..." gir meg kun ett resultat, altså kun tre linjer.

Linja:

print "Test array: ", $matches{$key}[3]->{album}, "\n";

gir jo fint resultatet som ligger i posisjon 3.

 

So how come and what gives? My brain hurts!

Endret av DrDoogie
Lenke til kommentar
Videoannonse
Annonse

My bad.

 

Skrev: "foreach my $element (scalar @{$matches{$key}} - 1) {" i programmet, som egentlig skulle ha vært "foreach my $element (1..scalar @{$matches{$key}} - 1) {".

 

Meesa is a soa stoopida. :lol:

 

Men kluet i programmet går ut på å lese en samling regex'er, og matche disse med STDIN. Work in progress, move along folks.

 

EDIT: Hva er et "sikkerhestløfte", forresten?

Endret av DrDoogie
Lenke til kommentar

Det blir litt renere om du i stedet for

 foreach my $element (scalar @{$matches{$key}} - 1) {
 print "Original entry: '", $matches{$key}[$element]->{album},

skriver

 foreach my $element (@{$matches{$key}}) {
 print "Original entry: '", $element->{album},

Om du bruker (1..$x) vil du forøvrig ikke få med element 0. Om det er meningen blir min kode feil...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...