Thread Reguläre Ausdrücke suchen
(34 answers)
Opened by Bionerd at 2012-04-18 12:19
Also hier noch eine Ausgabe als Matrix:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 # Ausgabedatei der Zusammenfassung (csv): my $sum_out='zusammenfassung.csv'; # das gehört zu den anderen Definitionen am Anfang #... code ... # Zusammenfassung #printf ("%s+%s %u\n",split(/-!-/,$_),$anzahl{$_}) for (sort keys(%anzahl)); # ab hier neuer Code: # Ziel: # eine Matrix der Gezählten Kombinationen # der in den Dateien enthaltenen Ausdrücken # Liste aller gefundenen Ausdrücke # und die Postion, die sie in der Matrix einnehmen sollen my %positions; my @muster; for my $pair (sort keys(%anzahl)) { for(split(/-!-/,$pair)) { # wenn der Ausdruck schon eine Postion hat, dann überspringen next if exists $positions{$_}; # Dem Ausdruck eine Position in der zukünftigen Matrix zuweisen push(@muster,$_); $positions{$_}=$#muster; } } # die Matrix erstellen my @matrix; for my $pair (keys(%anzahl)) { my ($m1,$m2)=split(/-!-/,$pair); my $count=$anzahl{$pair}; # die Position in der Matrix ermitteln my $pos1=$positions{$m1}; my $pos2=$positions{$m2}; # Wert in die Matrix schreiben $matrix[$pos1][$pos2]+=$count; } # die Ausgabe als CSV: # Einträge mit ";" getrennt, Zeilenenden sind "\n"; open(my $fh, '>', $sum_out) or die("ERROR open $sum_out ($!)\n"); # Zeilen/Spalten beschreiben: print $fh 'Muster;',join(';',@muster)."\n"; # matrix durchgehen: for my $pos1 (0..$#muster) { # Wenn eine Kombination nicht existiert, den Wert auf 0 setzen for my $pos2 (0..$#muster) { $matrix[$pos1][$pos2]=0 unless($matrix[$pos1][$pos2]); } # Muster angeben: print $fh $muster[$pos1].";"; # die Ausgabe erzeugen print $fh join(';',@{$matrix[$pos1]})."\n"; } close($fh); Zuerst gehe ich alle Gefundenen Werte durch und setze ihre Stelle in der Ausgabematrix. danach erstelle ich die Matrix. Da ist %positions nützlich. Es enthält die Positionen der Werte in der Spalte/Zeile (Quadratische Matrix). Bei der Ausgabe ist die Erste Zeile und Erste Spalte die gefunden Werte. Manche Kombinationen existieren nicht und werden auf 0 gesetzt, ansonsten käme es zu einer "undef" Warnung. |