Thread nach dem Fund Zeilennummern auch zurückgeben
(22 answers)
Opened by Henri at 2015-05-09 15:57
Um an eine Zeilennummer zu kommen gibt's natürlich mehrere Möglichkeiten: Zähler für die Zeile in der Schleife hochzählen, über die Arrayindices statt über die Arrayeinträge iterieren oder auch die Datei einfach zeilenweise einlesen und die eingebaute Zeilennummervariable verwenden.
Um alle Zeilennummern zu speichern wäre es dann sinnvoll, in dem Hash Arrays von Zeilennummern zu hinterlegen statt die Anzahl der Treffer in der letzten Zeile zu speichern. Schließlich sollte man die Suchbegriffe am besten noch sauber escapen, falls sie nicht garantiert immer korrekte reguläre Ausdrücke sind. Mir ist auch nicht ganz klar, in welcher Form die Suchbegriffe denn nun auftreten dürfen, denn der Code sucht nach Dingen die mit Whitespace oder Semikolon vom übrigen Text abgeteilt sind, während das Beispiel nahelegt, dass das nicht erforderlich sein sollte. Eine mögliche Lösung könnte so aussehen: 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 #!/usr/bin/perl use 5.012; use warnings; my %matches; my @candidates = qw(Wort1 Wort2 wort3 wort4); while (my $line = <DATA>) { for my $candidate (@candidates) { push @{$matches{$candidate}}, $. if ($line =~ m/(^|[\s.;])\Q$candidate\E([\s.;]|$)/i); } } while (my ($candidate, $linenos) = each %matches) { say "$candidate found on line ", join(", ", @{$linenos}); } __DATA__ aaaaaaaaaaaaaaaaaaaaa.wort1;aaaaaaaa bbbbbbbbbbbbbb wort2 bbbbbbbbbbbbbbb ccccccccccccccccccccc wort3 cccccccc ddddddddddd wort1 dddddwort2dddddddd eeeeeeeeeeeeeeeeeeee wort4 eeeeeeeee When C++ is your hammer, every problem looks like your thumb.
|