Schrift
[thread]8541[/thread]

Registry durchlaufen: rekursiv? (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
PerlProfi
 2006-12-04 19:19
#72103 #72103
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
@esskar das kann aber lange dauern...
esskar
 2006-12-05 08:26
#72104 #72104
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
depends
Code: (dl )
1
2
3
4
use strict;
use warnings;
my $c = 0; sub foo { print "$c\n"; $c++; my $mem = 'x' x 1000000; foo(); }
foo();
PerlProfi
 2006-12-06 20:38
#72105 #72105
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,05.12.2006, 07:26]
Code: (dl )
1
2
3
4
use strict;
use warnings;
my $c = 0; sub foo { print "$c\n"; $c++; my $mem = 'x' x 1000000; foo(); }
foo();
[/quote]
Das kann aber auch einige Zeit dauern.
Reen
 2006-12-10 17:31
#72106 #72106
User since
2006-12-01
11 Artikel
BenutzerIn
[default_avatar]
Hallo Leute...

Ne weile nix dran gemacht und jetzt habe ich die Suchfunktion eingebaut. Das Prob ist, das irgendwas an den RegExpr noch nich ganz so 100%tig stimmt. Er findet z.B. noch Schlüssel, die ich gar nich in der Suche eingegeben habe.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#! perl

use Win32::TieRegistry;

print "Registryschluessel finden und loeschen!\n";
print "Suchbegriff: ";
$eingabe = <STDIN>;

my $regroot = $Registry -> Open ("CConfig/Software", {Delimiter=>"/"});
my $regpath= $regroot -> Path;

&func($regroot);

sub func
{ my $regkey = shift;
my ($key, $dir);

foreach $key (keys %$regkey) &nb
sp; # Check ob Keys oder Keys mit Werten
{ chomp($key);

if ($key =~ /^(\/[$eingabe].*)/i)

{ my $name = $1;

$PathSubKey = $regkey -> Path;

chomp($name);

print "RegistyPath: ", $PathSubKey, "\n";

print "Name: ", $name, " Wert: ", $regkey->{$name}, "\n\n";

print "Schluesselwertepaar loeschen? [j/n] ";

my $choice = <STDIN>;

print $choice;

if ($choice =~ /j{1}|J{1}/)

{ print "JA";

my $del = delete $regkey -> {"$name"};

}

}

if ($key =~ /(\/)$/)
{if ($key =~ /^([$eingabe].*)/i)

{ my $name1 = $1;

$PathSubKey = $regkey -> Path;

print $PathSubKey, "[$name1]", "\n";

print "Schluessel mit allen Schluesselwertepaaren loeschen? [j/n] ";

my $choice1 = <STDIN>;

if ($choice1 =~ /j{1}|J{1}/)


{ my $del1 = delete $regkey -> {"$name1"};





exit;


}


}

$dir = $regkey -> Open ("$key"); # In neuen Schlüssel wechseln
$path = $dir -> Path;

&func($dir);
} ;
}
}


Zum Beispiel gibts unter oben eingetragenen Schüssel einen Werte "ProxyEnable" unter InternetSettings. Mit dem Suchbegriff "pro" findet er in auch, aber er findet zusätzlich noch "OEMFONT.FON". Kann mir das ehrlich gesagt nich ganz erklären. Da liegt bestimmt noch ein Fehler bei den RegExpr vor.

Was könnte man daran verbessern, dass es dann passt. Also die Suche soll nur die Schlüssel finden, die am Anfang die eingegebene Zeichenkette enthällt.

Danke
Reen\n\n

<!--EDIT|Reen|1165765029-->
renee
 2006-12-10 17:50
#72107 #72107
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was willst Du mit
Code: (dl )
            if ($key =~ /^(\/[$eingabe].*)/i)

ausdrücken?

Ich nehme an, Du meinst eher
Code: (dl )
            if ($key =~ /^(\/\Q$eingabe\E)/i)


Und aus
Code: (dl )
if ($choice1 =~ /j{1}|J{1}/)
kannst Du
Code: (dl )
if ($choice1 =~ /j/i)
machen...
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/
Reen
 2006-12-10 20:22
#72108 #72108
User since
2006-12-01
11 Artikel
BenutzerIn
[default_avatar]
Hi ....

also das erste was du gepostet hast geht überhaupt nich. Damit findet die Suche nix. Ich frage mich auch, was dieses \Q und \E bedeuten soll? Darüber findet man ja glatt mal gar nix im Web.

Hast du/ihr eventuell einen anderen Vorschlag. Diese RegExpr sind schon echt tricky, bevor die funzen.

thx
Reen
PerlProfi
 2006-12-10 21:40
#72109 #72109
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Also, renees RgeExp sieht aber nicht falsch aus, eventuell hast du eine falsche Eingabe gemacht?

\Q\E escapen alle Sonderzeichen von $eingabe.

Und bei mir funktioniert das hier ganz gut:
Code: (dl )
1
2
3
4
5
6
7
8
my $eingabe = "perl";

foreach (qw/perl-community persil perle pass/)
{
if ($_ =~ /^\Q$eingabe\E/) {
print "Ergebnis: $_\n";
}
}


MfG PerlProfi
renee
 2006-12-10 22:49
#72110 #72110
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Reen: Du solltest vielleicht mal Beispieldaten posten... Was gibst Du ein? Was wird gefunden? Was soll gefunden werden?

Meine Glaskugel ist zur Zeit in Reparatur...
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/
renee
 2006-12-10 22:51
#72111 #72111
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu \Q und \E steht was in perlreref
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/
Reen
 2006-12-10 23:17
#72112 #72112
User since
2006-12-01
11 Artikel
BenutzerIn
[default_avatar]
Ich habe jetzt ne andere Lösung gefunden, die bis jetzt auch soweit funktioniert. Die anderen Lösungen wollten einfach nich so bzw. haben gar nich gefunzt.

Mal sehen, ob meine Lösung vielleicht doch wieder an seine Grenzen stößt. Dann melde ich mich nochmal.

gruss
Reen
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2006-12-01 12:01.