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

Checkbutton-Array: Werte in Array laden

Leser: 1


<< >> 9 Einträge, 1 Seite
TheDHK
 2007-02-04 12:47
#46173 #46173
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Hi,
ich erzeuge mit einer for-Schleife Checkbuttons:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for my $i (1..int($checkbuttonzahl/3))
  {
    # jetzt erstmal einen Frame erzeugen
    $frame = $page1->Frame(-background => 'sky blue')
    ->pack(-side => "top", -fill => "x", -expand => 1);

  # dann kann man die 3 nächsten Suchmaschinen eintragen
    for my $j (0..2)
    {
      $checkbuttons[($i-1)*3+$j] = $frame->Checkbutton(-text => $av_searches[($i-1)*3+$j],
        -font => '{Bimini} 12 {bold}',
        -background => 'sky blue',
        -activebackground => 'sky blue',
        -onvalue => (($i-1)*3+$j)+1,
        -command => sub { testus(); },
        -variable => \$suchers[($i-1)*3+$j])->pack(-side => "left");
    }
  }


Wie ihr seht, übergebe ich mit -onvalue der -variable einen Wert. Wenn ein Checkbutton nicht aktiviert ist, wird 0 übergeben, da -offvalue nicht gesetzt ist. Und als Befehl wird testus(); aufgerufen.
Folgendes Problem:
Ich gebe mit testus(); mit print @suchers das Array aus. Dann erhalte ich ungefähr sowas (bei zwei aktivierten Checkbuttons):
0000000090001300
Ich will aber nun, dass die ganzen Nullen aus dem Array gestrichen werden, d. h. nur noch die Elemente "9" und "13" übrig bleiben. Wie könnte ich sowas realisieren? Die Schwierigkeit ist ja, dass das Array immer wieder aktualisiert werden muss, wenn beispielsweise der Anwender einen aktivierten Button deaktiviert. Danke für eure Hilfe.

Gruß

TheDHK
PerlProfi
 2007-02-04 13:23
#46174 #46174
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du kannst doch mit grep() die 0 rausstreichen:
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
sub testus
{
print "Aktiviert: ", join(", ", grep({ $_ ne "0" } @suchers)), "\n";
}

for my $i (1..int($checkbuttonzahl/3))
{
# jetzt erstmal einen Frame erzeugen
$frame = $page1->Frame(-background => 'sky blue')
->pack(-side => "top", -fill => "x", -expand => 1);

# dann kann man die 3 nächsten Suchmaschinen eintragen
for my $j (0..2)
{
$checkbuttons[($i-1)*3+$j] = $frame->Checkbutton(-text => $av_searches[($i-1)*3+$j],
-font => '{Bimini} 12 {bold}',
-background => 'sky blue',
-activebackground => 'sky blue',
-onvalue => (($i-1)*3+$j)+1,
-command => sub { testus(); },
-variable => \$suchers[($i-1)*3+$j])->pack(-side => "left");
}
}


MfG PerlProfi
TheDHK
 2007-02-04 15:20
#46175 #46175
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Hi,
vielen Dank, das klappt schon mal super. Jetzt will ich nur noch eins wissen: Wie kann ich die beiden Werte "9" und "13" (ohne Nullen) in ein Array laden?

Gruß

TheDHK
PerlProfi
 2007-02-04 16:02
#46176 #46176
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
So:
Code: (dl )
my @arr = grep { $_ ne "0" } @suchers;

Siehe dazu:
perldoc -f grep

MfG PerlProfi
TheDHK
 2007-02-08 17:57
#46177 #46177
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Vielen Dank.
Jetzt habe ich noch eine Frage: Wie kann ich einem String alle x Zeichen ein "\n" einfügen? Z. B. hab ich den String my $string = "Das ist nur ein Beispielstring, um mein Anliegen zu verdeutlichen.";. Und da möchte ich jetzt alle 5 Zeichen ein "\n" drinhaben. Wie mach ich sowas? Hab schon mal gegoogelt, aber nix brauchbares gefunden. Wenn Wörter auseinandergerissen werden, ist das nicht so schlimm.

Gruß

TheDHK
renee
 2007-02-08 18:34
#46178 #46178
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
$string =~ s/(.*){5}/$1\n/g;
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/
TheDHK
 2007-02-09 17:55
#46179 #46179
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Hi,
das funktioniert leider nicht. Habe folgendes Skript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $dsc;
my $desctitel;
my $beschreibungstitel;
my $descpt;
# ....
# ....
my $beschreibungstitel = $suchpopupframe->Label(-textvariable=> \$desctitel, -font=>'{Bimini} 12 {bold} {underline}', -background=>'#F0E68C')->place(-x=>'480', -y => '96');
  my $descpt = $suchpopupframe->Label(-textvariable=> \$dsc, -font=>'{Bimini} 12 {bold}', -background=>'#F0E68C')->place(-x=>'480', -y => '120'); 
# ....
sub testus {
  my @searcherarray = grep { $_ ne "0" } @suchers;
  for(my $i = 0;$i < @searcherarray;$i++) {
    $searcherarray[$i] -= 1;
    $desctitel = $av_searches[$searcherarray[$i]];
    $dsc = $germandescription[$searcherarray[$i]];
    $dsc =~ s/(.*){5}/$1\n/g;
  }
}


Als Ausgabe krieg ich nur ein paar Leerzeichen. Der String $germandescription[$searcherarray[$i]] ist nicht leer, den habe ich auch schon mal einzeln ausgeben lassen.

Gruß

TheDHK
renee
 2007-02-09 18:13
#46180 #46180
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Fehler von mir... muss so heissen
Code: (dl )
$string =~ s/(.{5})/$1\n/g;
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/
TheDHK
 2007-02-10 17:10
#46181 #46181
User since
2007-01-19
37 Artikel
BenutzerIn
[default_avatar]
Vielen Dank, jetzt klappts!

Gruß

TheDHK
<< >> 9 Einträge, 1 Seite



View all threads created 2007-02-04 12:47.