Thread Komische von Rekursiven Durchsuchalgorithmus
(6 answers)
Opened by
format_c
at 2004-05-16 22:54
User since 2003-08-04
1706
Artikel
HausmeisterIn
Ich könnte ja die ganzen 300 Zeilen posten weil ich nicht genau weis wo der Fehler herkommt.
Hier der Code des Dialoges wo der Pfad eingegeben wird:
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
my $w = 350; my $h = 200; # Abbruchsvariable resetten falls gesetzt $Config{abbr} &&= 0; my ($width,$height,$pos_x,$pos_y) = split /\+|x/,$Config{main_window}->geometry(); $Config{tl} = $Config{main_window}->Toplevel(-title=>'Startkriterien'); $Config{tl}->Icon(-image=>$Config{Icon}); $Config{tl}->minsize($w,$h); $Config{tl}->geometry('+' . int($width / 2 + $pos_x - $w / 2) . '+' . int($height / 2 + $pos_y - $h / 2) ); $Config{tl}->focusForce(); my $frame = $Config{tl}->Frame()->pack(-anchor=>'n');
$frame->Label(-text=>'') ->grid(-column=>0,-row=>0,-sticky=>'ew'); $frame->Label(-text=>'') ->grid(-column=>1,-row=>0,-sticky=>'ew'); $frame->Label(-text=>'Startpfad:',-anchor=>'w') ->grid(-column=>0,-row=>1,-sticky=>'ew'); $frame->Entry(-textvariable=>\$Config{start}) ->grid(-column=>1,-row=>1,-sticky=>'ew'); $frame->Label(-text=>'Suchtext:',-anchor=>'w') ->grid(-column=>0,-row=>2,-sticky=>'ew'); $frame->Entry(-textvariable=>\$Config{suche}) ->grid(-column=>1,-row=>2,-sticky=>'ew'); $frame->Label(-text=>'Ersetzung:',-anchor=>'w') ->grid(-column=>0,-row=>3,-sticky=>'ew'); $frame->Entry(-textvariable=>\$Config{ersetzung}) ->grid(-column=>1,-row=>3,-sticky=>'ew'); $frame->Label(-text=>'Versuchen das Ziel aufzulösen?:',-anchor=>'w') ->grid(-column=>0,-row=>4,-sticky=>'ew'); $frame->Checkbutton(-variable=>\$Config{resolve},-anchor=>'w') ->grid(-column=>1,-row=>4,-sticky=>'ew'); $frame->Label(-text=>'Bestätigung beim Auflösen?:',-anchor=>'w') ->grid(-column=>0,-row=>5,-sticky=>'ew'); $frame->Checkbutton(-variable=>\$Config{confirm},-anchor=>'w') ->grid(-column=>1,-row=>5,-sticky=>'ew'); $frame->Label(-text=>'') ->grid(-column=>0,-row=>6,-sticky=>'ew'); $frame->Label(-text=>'') ->grid(-column=>1,-row=>6,-sticky=>'ew'); $frame->Button(-text => 'Start', -command => \&_durchsuchen, -width => 20) ->grid(-column=>0,-row=>7); $frame->Button(-text => 'Abbrechen', -command => sub{$Config{tl}->destroy();}, -width => 20) ->grid(-column=>1,-row=>7); # Bindungen $Config{tl}->bind('<Return>',\&_durchsuchen);
Und hier die sub _durchsuchen
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
# Toplevel zerstören $Config{tl}->destroy(); $Config{start} ||= ''; $Config{such} ||= ''; $Config{ersetzung} ||= ''; # Pfüfung der ausgefüllten Felder unless (-d $Config{start}) { $Config{main_window}->messageBox(-title=>'Felder wurden nicht korrekt ausgefüllt!', -message=>"Das Verzeichnis $Config{start} ist kein Verzeichnis oder existier nicht.", -icon=>'error', -type=>'OK' ); return; } if ($Config{suche} xor $Config{ersetzung}) { $Config{main_window}->messageBox(-title=>'Felder wurden nicht korrekt ausgefüllt!', -message=>"Bitte Such und Ersetzungsfeld ausfüllen um Ersetzung durchzuführen oder keines um keine Ersetzung durchzuführen.", -icon=>'error', -type=>'OK' ); return; }
#------------------------------------------------------------------------------------------ ---- # Toplevel zur Beschäftigung anzeigen #------------------------------------------------------------------------------------------ ---- my $w = 150; my $h = 100; my $text1 = 'Durchsuche'; my $text2 = ''; my $Icon = $Config{main_window}->Photo(-file=>$FindBin::Bin . '/chklnk.gif'); my ($width,$height,$pos_x,$pos_y) = split /\+|x/,$Config{main_window}->geometry(); $Config{tl} = $Config{main_window}->Toplevel(-title=>'Durchsuche...'); $Config{tl}->Icon(-image=>$Config{Icon}); $Config{tl}->minsize($w,$h); $Config{tl}->geometry('+' . int($width / 2 + $pos_x - $w / 2) . '+' . int($height / 2 + $pos_y - $h / 2) ); $Config{tl}->focusForce(); my $frame1 = $Config{tl}->Frame()->pack(); my $frame2 = $Config{tl}->Frame()->pack(); $frame1->Label(-text=>$text1,-anchor=>'w')->pack(-side=>'left'); $frame1->Label(-textvariable=>\$text2,-anchor=>'w',-width=>5)->pack(-side=>'left'); $frame2->Label(-image=>$Icon)->pack(-side=>'top'); $frame2->Button(-width=>20, -text=>'Abbruch', -underline=>0, -command=>sub{$Config{abbr} = 1;$Config{tl}->destroy();} )->pack(-side=>'top'); $Config{tl}->bind('<Return>',sub{$Config{abbr} = 1;$Config{tl}->destroy();}); $Config{tl}->bind('<a>', sub{$Config{abbr} = 1;$Config{tl}->destroy();}); #------------------------------------------------------------------------------------------ ------ my $i = 0; my @verz = ($Config{start}); for my $file (@verz) { $Config{tl}->update(); last if $Config{abbr} == 1; $text2 = '.' x $i; $i = 0 if ++$i > 3; if ($file =~ /\.lnk$/) { _check($file); next; } if(-d $file) { opendir DIR,$file or die "Konnte Verzeichnis $file nicht öffnen: $!"; push @verz,map { $file . '\\' . $_ } grep !/^\.\.?$/ && (-d $file . '\\' . $_ or /\.lnk$/i), readdir DIR; closedir DIR; } } $Config{tl}->destroy(); unless ($Config{abbr} == 1) { $Config{main_window}->messageBox(-title=>'Suche abgeschlossen', -message=>"Suche im Verzeichnis $Config{start} abgeschlossen", -icon=>'info', -type=>'OK' ); }
Gruß Alex
View full thread Komische von Rekursiven Durchsuchalgorithmus
|