Thread Benutzerdefinierte Suche in Dateien (2 answers)
Opened by sman at 2011-05-04 13:42

sman
 2011-05-04 13:42
#148255 #148255
User since
2011-01-23
5 articles
BenutzerIn
[default_avatar]
Hallo,

ich habe einen Haufen von Textdateien und ein Interface zur Eingabe eines Suchbegriffs. Ich möchte dass der Benutzer nutzen kann:
  • Regexps
  • and, or, not
  • Klammern

Gibt es eine elgante Möglichkeit oder ein fertiges Modul, mit dem das geht?

Meine Version bisher scheint mir etwas Holzhammermäßig, sie parst sicherlich nicht jede verschachtelte Eingabe richtig und erzeugt einen String mit dem kompletten Dateiinhalt und durchsucht diesen mit //s:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my $q = 'foo and not (bar or beer)'; #user input
$q =~ s/(^|[^\\])\//$1\\\//g; #escape slashes
my $searchexpr = join ' ', map {s/\/(and|or|not)\/si/$1/gi;$_} map {s/([^\(\)]+)/\/$1\/si/g;$_} split /\s+/, $q;
$searchexpr =~ s/\/si (not )?\//\/si and $1\//g;
# $searchexpr now is: /foo/si and not (/bar/si or /beer/si)

my $found = 0;
foreach my $d (@files) {
  open F, $d;
  my @f = <F>;
  $_ = join '', @f;
  $found++ if eval $searchexpr;
  close F; }

print 'The expression was true in '.$found.' files';

Last edited: 2011-05-04 13:43:59 +0200 (CEST)

View full thread Benutzerdefinierte Suche in Dateien