Schrift
[thread]531[/thread]

Wildcards mit Perl



<< >> 8 Einträge, 1 Seite
cooldie
 2005-07-20 16:11
#5292 #5292
User since
2005-07-19
14 Artikel
BenutzerIn
[default_avatar]
Hi Jungs ich hab in einer Datei Einträge drinnen stehen wie :
Test!~2323*.*
Ich möchte also das wenn ich das überprüfe mein Programm das erkennt es nimmt den String aber GENAUSO ohne die Wildcards aufzulösen.
Habt ihr eine Idee wie ich das machen kann ?

Gruß Patrick
dominicn
 2005-07-20 16:25
#5293 #5293
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
Du möchtest also einen String haben, der dann Test!~2323*.* enthält? Dazu liest du ganz normal aus der Datei ein, Perl interpretiert da nicht automatisch irgendwas ungewollt.

Oder habe ich dich missverstanden? So ganz klar verständlich fand ich&´s leider nicht ...
renee
 2005-07-20 16:26
#5294 #5294
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was möchtest Du machen?? Was wird aufgelöst??

Beim einlesen und ausgeben wird nichts ersetzt:
Code: (dl )
1
2
3
4
~ 6> cat >wildcard.txt
Test!~2323*.*
~ 7> perl -le 'print while(<>);' wildcard.txt
Test!~2323*.*


Du musst schon genauer erklären, was Du willst und vielleicht auch etwas Code anbieten... Edit .... und auch mal http://wiki.perl-community.de/bin....rtNicht lesen...\n\n

<!--EDIT|renee|1121862780-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Relais
 2005-07-20 16:27
#5295 #5295
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Teil uns doch mit, was das Ziel ist (andere Einträge, wo? Dateien? Datenzeilen?), mit dem Perl diese Wildcards auflösen können sollte - und vielleicht auch noch, wie sie funktionieren sollen (was bedeuten !, ~ in Deinem System von Wildcards?).
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
cooldie
 2005-07-20 16:36
#5296 #5296
User since
2005-07-19
14 Artikel
BenutzerIn
[default_avatar]
Sorry,
Ich habe in einer Datei halt Sachen drinne als Beispiel :
T*st*
Nun lese ich diesen String ein.
Ich möchte aber nun nicht wenn ich vergleiche if ($eingabe eq $zeile) überprüfen ob $eingabe GLEICH T*st* ist sondern ob $eingabe GLEICH Test oder Tsst ist so das aus dem * alle belieben Zeichen werden so wenn man z.B eine IP bannt und man schreibt :
*.*.*.*
so werden ALLE IPs gebannt genau so soll das hier auch funktionieren
Ich hoffe ihr habt nun verstanden was ich meine!

gruß Patrick

EDIT :
das ! hat keine bedeutung es kommt nur im String drinne vor da dies eine Hostmark wie dies ist:
nick!~nick@host\n\n

<!--EDIT|cooldie|1121863140-->
renee
 2005-07-20 16:53
#5297 #5297
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wildcard.txt:
Code: (dl )
T*s*

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

use strict;
use warnings;

my @re;

open(my $fh,"<$ARGV[0]") or die $!;
while(<$fh>){
chomp;
s/\*/.*/g;
push(@re,$_);
}
close $fh;

for(@re){
print "yes" if('Test' =~ /^$_$/);
}


Edit: Aufruf: skript.pl wildcard.txt\n\n

<!--EDIT|renee|1121864020-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
cooldie
 2005-07-20 19:09
#5298 #5298
User since
2005-07-19
14 Artikel
BenutzerIn
[default_avatar]
Danke könntest du noch etwas zu deinen Code sagen folgendes ist mir Unklar :
s/\*/.*/g;       /g ersetzt ein Zeichen?

if('Test' =~ /^$_$/);   was bedeutet hier das $_$ ?

Gruß Patrick

EDIT :
Code: (dl )
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
33
34
35
36
37
38
39
chop $message;

my $matching = "false";

my $datei = "aop.cfg";

if(-e $datei)
{
    open(INPUTFILE,$datei);
    @fileContent=<INPUTFILE>;
    close(INPUTFILE);
    foreach my $aktuelleZeile (@fileContent) {
        if($aktuelleZeile =~ /"(.*)","(.*)"/) {
            print "$1 - $2 : $message - $hostmask\n";
            if($1 eq $message && $2 eq $hostmask>) {
               
 $matching = "true";
                 
  print "Match!";        
                   } else {
                 
  if($matching ne "true") {
                     
  $matching = "false";
                 
  }
              }

        }
    }

}
else
{    
 print "\n*** Error cant Read file $datei!\n";
}

aop.cfg:
"test","cooldie!~cooldie@blablabla"


Mein aktueller Code ohne Wildcards hab keine Ahnung wie ich das da intergrieren muss\n\n

<!--EDIT|cooldie|1121873011-->
renee
 2005-07-20 19:22
#5299 #5299
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
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
#!/usr/bin/perl

use strict; # sollte in keinem Programm fehlen
use warnings;

my @re;

open(my $fh,"<$ARGV[0]") or die $!;
while(<$fh>){
chomp; # entferne Zeilenumbruch (bzw. $/)
s/\*/.*/g; # s - ersetze;
# \* - den Stern (muss escaped werden, da Sonderzeichen in
RegEx
# durch .*
# g - alle (global)
push(@re,$_);
}
close $fh;

for(@re){
# ^ - beginn des Strings
# $_ das aktuelle Element aus @re
# $ Ende des Strings
print "yes" if('Test' =~ /^$_$/);
}


Ich empfehle folgende "Literatur" zu Regulären Ausdrücken:
perldoc perlrequick
perldoc perlre
perldoc perlretut (schau mal ins Wiki, glaub ist sogar in deutsch)
http://regenechsen.de
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2005-07-20 16:11.