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

Per Schleife $Variablen$zaehler durchnummerieren?

Leser: 1


<< >> 6 Einträge, 1 Seite
Duff
 2007-10-11 10:52
#100654 #100654
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

ich habe mal eine Frage zu einem Ablauf.

Und zwar habe ich eine Funktion, die in etwa so aussieht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub print_formatted{
        my ($max,$t1,$t2,$t3,$t4,$t5,$t6) = @_;

        # berechne den linken Rand $lRand
        my ($lRand) = int( ($max - length $t4) / 2 );
        # berechne den rechten Rand $rRand
        my $rRand = $max - $lRand - length $t4;

        my $format = "%6d %-12s %-12s %*s%s%*s %-12s %10d\n";

        print sprintf $format, $t1,$t2,$t3,$lRand,' ',$t4,$rRand,' ',$t5,$t6;
}


Nun möchte ich aber die Funktion so anpassen, dass die Formatierung nicht nur für einen Wert gilt, sondern für mehrere.
Sprich, ich müsste in einer Schleife was bilden, was ungefähr so aussieht:
Code (perl): (dl )
1
2
3
4
for (my $i=1; $i<=$anzahl;$i++) {
        $lRand$i = int( ($may - length$t$i) / 2);
}
...


Nur wie bekomme ich diese Nummerierung $lRand1, $lRand2, ... und $t1, $t2, usw hin.

Danke.
D'OH
Daniel
renee
 2007-10-11 11:03
#100655 #100655
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Am besten gar nicht. Geschickterweise nimmt man da einen Hash... Der wuerde dann so aussehen:

Code: (dl )
%hash = ( Rand1 => 23, Rand2 => 15, t1 => 'test', t2 => 'Welt' );


In der Schleife wuerde es dann so aehnlich aussehen:
Code (perl): (dl )
1
2
3
 for ( 1..$anzahl ){
    $hash{ "Rand".$_ } =  int( ( $may - length $hash{ "t".$_} ) / 2);
}
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/
Duff
 2007-10-11 11:26
#100658 #100658
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Verstehe ich nicht so ganz.

Ich habe die Werte für Rand1, Rand2, usw. doch noch gar nicht und müsste sie im Hash ja dann auf undef setzen.
D'OH
Daniel
renee
 2007-10-11 11:38
#100660 #100660
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vor der Schleife sollten in dem Hash nur "t"-Werte enthalten sein. Nach der Schleife sind in dem Hash auch die "Rand"-Werte enthalten...
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/
pq
 2007-10-11 11:46
#100662 #100662
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Duff+2007-10-11 08:52:10--
Code (perl): (dl )
1
2
3
4
for (my $i=1; $i<=$anzahl;$i++) {
        $lRand$i = int( ($may - length$t$i) / 2);
}
...

wann immer man sowas will $var$i, sollte man ein array verwenden (zumindest wenn
$i eine zahlenabfolge 0..n durchläuft).
warum will man sich mit symbolischen referenzen rumschlagen (was durchaus geht in perl),
wenn es dafür arrays gibt, die genau für sowas erfunden wurden?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2007-10-11 14:48
#100671 #100671
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
sowas schreit nach einem Arrays, schon die Parameter solltest du als Arrays verwenden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub print_formatted{
        my ($max, @t) = @_;
        my @lRand;
        my @rRand;
        foreach(0..@t) {
        # berechne den linken Rand $lRand
        push @lRand,  int( ($max - length $_) / 2 );
        # berechne den rechten Rand $rRand
        push @rRand, $max - $lRand - length $_;
        }
        .....
}


Da mir nicht ganz klar ist in welchen Kontext die einzelnen Parameter zum Rand stehen, kann ich dir aber nicht sagen wie der printf Befehl aussehen muss.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-10-11 10:52.