Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6920[/thread]

Suchen mittels Regex und Ausgabe

Leser: 1


<< >> 4 Einträge, 1 Seite
Gast Gast
 2005-04-22 01:20
#54120 #54120
Hallo

Ich habe ein Perl Skript der in einer Datei nach einer Zeichenfolge sucht und das Resultat ausgibt mit Zeilennummer.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

open( DATEI, "<@ARGV[0]" ) or die $!; # einlesen einer Datei über Parameter

$resultat=0;

while( $zeile = <DATEI> ) { &nbsp
; # alle Zeilen einlesen
$zeilenAnzahl++;
if( $zeile =~ m/@ARGV[1]?/i ) {
print "Zeile " . $zeilenAnzahl . ": " . "\n";
$resultat++;
}
}

print "\n";
print "Das Wort \" " . @ARGV[1] . " \"" . " ist in der Datei " . "\" " . @ARGV[0] . " \" " . $resultat . " mal enthalten.";

print "\n\n";

close( DATEI ); &n
bsp; # Datei schliessen


Wie kann ich neben den Zeilennummern nun noch das Wort ausgeben welches die Zeichenfolge beinhaltet?

Besten Dank für Eure Hilfe.

Gruss
Savvo
Thorium
 2005-04-22 02:03
#54121 #54121
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
if( $zeile =~ m/($ARGV[1])/i ) {
    print "Inhalt der Klammer: $1";
}

Du solltest unbedingt use strict verwenden:
Code (perl): (dl )
1
2
3
4
5
#!/usr/bin/perl
use warnings;
use strict;

my $variable = 0; # Variablendeklaration mit my


Wenn du ein Skalar aus einem Array holst ist der operator $ und nicht @:
Code (perl): (dl )
1
2
3
4
5
my @array = qw(a b c d e f);
my $a = $array[0];
my $b = $array[1];
#aber:
my @CtoE = @array[2..4];
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
eisbeer
 2005-04-22 14:05
#54122 #54122
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Erstens würde ich mir Thoriums Post zu Herzen nehmen,
Zweitens:

Code: (dl )
if( $zeile =~ m/\w(.*$ARGV[1].*)\w/i ) {


Ungetestet, aber so sollte das Wort, das $ARGV[1] enthält, in $1
gespeichert sein. Aber die Regex ließe sich noch verfeinern denk ich.
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
Strat
 2005-04-22 15:59
#54123 #54123
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=eisbeer,22.04.2005, 12:05]
Code: (dl )
if( $zeile =~ m/\w(.*$ARGV[1].*)\w/i ) {
[/quote]
was passiert bei dieser zeile, wenn der aufruf
Code: (dl )
script.pl (abc

lautet?

wenn man variablen in regulaeren ausdruecken verwendet, dann werden die darin befindlichen RE-Sonderzeichen (z.B. punkt, *, klammern, etc) nicht als normale zeichen behandelt.

Code: (dl )
1
2
3
4
5
C:>perl
my $var = '[';
print if /$var/;
^D
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE / at - line 2.


deshalb: immer den Wert der Variablen quoten, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
C:>perl
use warnings;
use strict;
$_ = "(abc)";
my $var = "(ab";
print if /\Q$var\E/;
^D
(abc)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 4 Einträge, 1 Seite



View all threads created 2005-04-22 01:20.