1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/perl use strict; use warnings; use Tie::File; my @testitems = qw(Wort1, Wort2, wort3, wort4); my $filename = 'result_2.csv'; my %result; #my $regexp = "(". join('|', map {uc($_)} @words) tie my @array, 'Tie::File', $filename or die "$!\n"; foreach my $item (@testitems) { $result{$item} = grep {/(^|[\s.;])$item([\s.;]|$)/i} @array; } untie @array; print "items found: "; foreach my $item (@testitems) { print "$item " if ($result{$item}); } print "\n";
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
Quotehast doch verstanden, oder?Possible attempt to separate words with commas at U:\Benutzer\Klaus\Perl\Test\Forum\henry.pl line 7.
2015-05-10T17:16:00 GUIfreundEs wäre in deinem eigenen Interesse, wenn du wenigstens die offensichtlichen Fehler aus deinem Programm entfernst, bevor du es ins Forum stellst. Die MeldungQuotehast doch verstanden, oder?Possible attempt to separate words with commas at U:\Benutzer\Klaus\Perl\Test\Forum\henry.pl line 7.
Und es ware auch nett, wenn du verrätst, an welcher Stelle du noch Probleme hast. Dann kann dir auch gezielter geholfen werden.
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
#! /usr/bin/perl use strict; use warnings; # words to search for my @words = qw( wort1 wort2 wort3 wort4 ); # built a regex for the search; each word is to be treated as string my $regex = join '|', map {"\Q${_}\E"} @words; # list of alternative strings $regex = qr{($regex)}; # capture the match my %position; while ( my $line = <DATA> ) { # save line number ($.) of each occurence in read lines; # use a while loop to catch multiple words in line push @{ $position{$1} }, $. while $line =~ m{$regex}g; } # show result for my $word ( sort keys %position ) { printf "%s Zeile: %s\n", $word,join ", ", @{$position{$word}}; } __DATA__ aaaa, aaaaa, aaaaaa, aaaaaa, wort1, aaaa, aaaa, bbbbb, bbbbb, bbbb, wort2, bbbbb, bbbb, bbbbbb, cccccc, ccccc, cccc, cccccc, wort3, cccc, cccc, ddddd, dddddd, wort1, dddddd, ddddd, dddd, ddd, eee, eee, eeeeee, eeeeeeee, wort4, wort2, eeee,
Guest Henriaber ich möchte auch, dass er mir die zeile nummer zurückgibt.
aaaaaaaaaaaaaaaaaaaaawort1aaaaaaaa
bbbbbbbbbbbbbbwort2bbbbbbbbbbbbbbb
cccccccccccccccccccccwort3cccccccc
dddddddddddwort1dddddddddddddddddd
....
wort1 Zeile: 1,4
my $regex = join '|', map {"\Q${_}\E"} @words; # list of alternative strings
my $regex = join '|', map quotemeta, @words; # list of alternative strings
aaaaaaaaaaaaaaaaaaaaawort1aaaaaaaa
aaaa, aaaaa, aaaaaa, aaaaaa, wort1, aaaa, aaaa,
Quotegibt er mir das folgende Ergebnis:
Quotesoll er mir das folgende Ergebnis geben:
{/(^|[\s.;])$item([\s.;]|$)/i}
Guest Henries ist aufgefallen, dass der Code keinen Unterschied zwischen 1, 10 oder s100dump macht, wenn ich nach der Zahl 1 fragt, bekomme ich für diese Beispiel 3 mal, obwohl es ein klarer unterschied zwishcen 1 10 und s100dump gibt.
RaubtierDenn im Gegensatz zu Murphy hat Linuxer bei der RegExp keine Begrenzer eingebaut, d.h. wort1 würde in xxxwort1xxx gefunden werden
2015-05-12T15:24:15 hlubenowGoogle mal nach "Perl in 21 Tagen" - Kapitel 9 und 10 haben eine schöne Einführung in RegEx (auf deutsch), die mir einsteigerfreundlicher erscheint als "perlre" und "perlretut".