Thread Reguläre Ausdrücke suchen
(34 answers)
Opened by Bionerd at 2012-04-18 12:19 2012-04-18T14:51:32 Bionerd ja 2012-04-18T14:51:32 Bionerd so z.B: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # zeile 7: # Liste aller Kombinationen über alle Dateien my %anzahl; #... #zeile 21: # alle Gefunden Kombinationen durch gehen # dann die Suchbegriffe mit "-!-" zusammenfügen # und dazu einen Zähler erhöhen # "sort" verhindert unnötige Dubletten $anzahl{join('-!-', sort @$_[0,1] )}++ for(@found); #... # zeile 25: # Zusammenfassung: printf ("%s + %s %u\n",split(/-!-/,$_),$all_match{$_}) for(sort keys(%anzahl)); 2012-04-18T14:51:32 Bionerd Ja es ist nicht schwer in Dateien auszugeben: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # zeile 7: # Ausgabepfad # sollte ein gesondertes Verzeichnis ein. my $out_dir='path/to/dir'; # Ersatz für Zeile 22: # alle Funde durchgehen, # passende Datei öffen # und Zeile hinzufügen. for my $e (@found) { my ($motive1,$motive2)= sort @$e[0,1]; my $outpath="$out_dir/$motive1_$motive2.txt"; if(open(my $fh, '>>', $outpath)) { printf $fh ("%s + %s found in Line %u and Line %u + %s\n", @$e,$file); } else { warn("Error open $outpath ($!)"); } } Wie das finden funktioniert:
Wenn eine Liste der Treffer eines Ausdruckes mit sich selbst verglichen wird, muss das gesondert behandelt werden. Hier die alternative für den Code von Zeile 72-83. Das ist der Teil wo die Funde von Ausdrücken kombiniert werten. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 if($motive1 eq $motive2) { my @list=@{$match{$motive1}}; for my $pos1 (0 .. $#list-1) { for my $pos2 ($pos1+1 .. $#list) { push(@found,[$motive1,$motive1,$list[$pos1],$list[$pos2]]); } } } else { for my $line1 (@{$match{$motive1}) { for my $line2 (@{$match{$motive2}}) { push(@found,[$motive1,$motive2,$line1,$line2]); } } } Die Codeausschnitte habe ich nicht getestet und können Fehler enthalten. Nebenbei. Auch wenn die Perl1 Form des open noch unterstützt wird, sollte man sich angewöhnen die moderne Form zu nutzen. Sie ist sicherer und hat auch andere Vorzüge. Sie dazu: WasIsteinLexikalischerFileHandle |