Schrift
[thread]10422[/thread]

zentrierte Darstellung mit printf möglich? (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
sid burn
 2007-09-19 15:26
#99675 #99675
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
renee+2007-09-19 13:12:52--
stimmt, da ich nicht mit format arbeite (habe eine unerklärliche Abneigung dagegen), denke ich da nicht dran...

So wie es in Perl5 eingebaut ist habe ich dagegen auch irgendwie ne Abneigung, aber so wie es in Perl6 implementiert werden soll ist es ziemlich gut. Auch die Möglichkeiten mit Perl6::Form sind ziemlich mächtig. Was damit alles geht möchte ich nicht mit (s)printf() anweisungen nachbauen. Perl6::Form finde ich ziemlich gut, aber auch noch wenig damit gemacht. Aber oberes Beispiel mal mit Perl6::Form.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;
use Perl6::Form;

my @values = (
    [ 1, 1,    'value1' ],
    [ 2, 20,   'value2' ],
    [ 3, 2000, 'value3' ],
);

print form "+---------+-----------+-----------+",
           "|  Wert1  |   Wert2   |   Wert3   |",
           "+---------+-----------+-----------+";

for my $value ( @values ) {
    print form "| {<<<<<} | {|||||||} | {>>>>>>>} |",
               $value->[0], $value->[1], $value->[2],
}

print form "+---------+-----------+-----------+";


Vielleicht geht es aber noch einfacher in einem Befehl ohne for Schleife. Man kann nämlich auch gleich Arrays etc. richtig ausgeben lassen. Ungefähr so:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use Perl6::Form;

my @werte1 = qw( 1 2 3 );
my @werte2 = qw( 2 20 2000 );
my @werte3 = qw( value1 value2 value3 );

print form "+---------+-----------+-----------+",
           "|  Wert1  |   Wert2   |   Wert3   |",
           "+---------+-----------+-----------+",
           "| {[[[[[} | {IIIIIII} | {]]]]]]]} |",
              \@werte1, \@werte2,   \@werte3    ,
           "+---------+-----------+-----------+";
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Duff
 2007-09-19 16:03
#99678 #99678
User since
2006-10-06
283 Artikel
BenutzerIn

user image
renee+2007-09-19 12:52:44--
Code (perl): (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
#!/usr/bin/perl

use strict;
use warnings;

my @values = (
    ['T',20,'H'],
    ['Hallo',3,'Welt'],
    ['Test',1035,'Eintrag'],
);

my $length = 6;

print sprintf "%-7s| %s |%9s\n",'col1','col2','col3';
for my $ref ( @values ){
    print_formatted( $length, @$ref );
}

sub print_formatted{
    my ($max,$t1,$zahl,$t2) = @_;
    
    my ($rand) = int( ($max - length $zahl) / 2 );
    my $right  = $max - $rand - length $zahl;
    
    my $format = "%-7s|%*s%s%*s|%9s\n";
    print sprintf $format, $t1,$rand,' ',$zahl,$right,' ',$t2;
}



Werde mir wohl sowas bauen, wie renee es geschrieben hat.
Perl6 habe ich nicht und mit format kenne ich mich nicht aus bzw. finde es ein wenig seltsam.

Danke.
D'OH
Daniel
renee
 2007-09-19 16:04
#99679 #99679
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Perl6::Form ist ein Modul für Perl5! Könntest Du also benutzen...
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-09-19 16:42
#99686 #99686
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ok, aber habe mir jetzt das Skript von dir als Vorlage genommen und es für meine Bedürfnisse abgeändert.
D'OH
Daniel
Duff
 2007-09-19 17:03
#99688 #99688
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

verstehe das ganze wohl doch noch nicht so ganz.
Habe folgendes gemacht:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
my $length;
my $width=4;
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;
}


print sprintf "%6s %-12s %-12s %s %-12s %10s\n", "Spalte1", "Spalte2", "Spalte3", "Spalte4", "Spalte5", "Spalte6";
      
        for(my $i=0; $i<=$#array; $i=$i+6) {
                print_formatted($width, $array[$i], $array[$i+1], $array[$i+2], $array[$i+3], $array[$i+4], $array[$i+5]);
        }


Sobald ich aber die Variable width auf 8 oder so setze, funktioniert die ganze Ausgabe nicht mehr sauber bzw. die Spalte mit $t4 wird nicht mehr zentriert, sondern nach rechts verschoben.
D'OH
Daniel
renee
 2007-09-19 17:07
#99689 #99689
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst in Zeile 17 die Breite der entsprechenden Spalte anpassen... Lass' die Spaltentitle am Besten auch mit der Subroutine ausgeben...
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-09-19 17:21
#99691 #99691
User since
2006-10-06
283 Artikel
BenutzerIn

user image
renee+2007-09-19 15:07:15--
Du musst in Zeile 17 die Breite der entsprechenden Spalte anpassen... Lass' die Spaltentitle am Besten auch mit der Subroutine ausgeben...


Sorry, aber in Zeile 17 steht doch für die Spalte ein %s, was beliebig groß sein darf, oder nicht?
Und du meinst die Zeile 17 mit in die Funktion packen?
D'OH
Daniel
renee
 2007-09-19 17:34
#99695 #99695
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Duff+2007-09-19 15:21:45--
renee+2007-09-19 15:07:15--
Du musst in Zeile 17 die Breite der entsprechenden Spalte anpassen... Lass' die Spaltentitle am Besten auch mit der Subroutine ausgeben...


Sorry, aber in Zeile 17 steht doch für die Spalte ein %s, was beliebig groß sein darf, oder nicht?

Ja, aber wenn Deine Werte breiter sind als "Spalte4", dann sieht es etwa so aus:

Code: (dl )
1
2
| Spalte1 | Spalte2 | Spalte3 | Spalte4 | Spalte5 |
| einWe | Test | Welt | aseinsdrsesad | hallo |


Und das ist was passiert, oder?

Deswegen musst Du auch den Spaltentitel von Spalte 4 breiter machen, damit das passt...

Quote
Und du meinst die Zeile 17 mit in die Funktion packen?

Nein, für die Spaltentitel auch die Subroutine aufrufen...
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-09-19 17:59
#99696 #99696
User since
2006-10-06
283 Artikel
BenutzerIn

user image
renee+2007-09-19 15:34:16--
Duff+2007-09-19 15:21:45--
renee+2007-09-19 15:07:15--
Du musst in Zeile 17 die Breite der entsprechenden Spalte anpassen... Lass' die Spaltentitle am Besten auch mit der Subroutine ausgeben...


Sorry, aber in Zeile 17 steht doch für die Spalte ein %s, was beliebig groß sein darf, oder nicht?

Ja, aber wenn Deine Werte breiter sind als "Spalte4", dann sieht es etwa so aus:

Code: (dl )
1
2
| Spalte1 | Spalte2 | Spalte3 | Spalte4 | Spalte5 |
| einWe | Test | Welt | aseinsdrsesad | hallo |


Und das ist was passiert, oder?

Deswegen musst Du auch den Spaltentitel von Spalte 4 breiter machen, damit das passt...

Quote
Und du meinst die Zeile 17 mit in die Funktion packen?

Nein, für die Spaltentitel auch die Subroutine aufrufen...


wie meinst du dass mit der Subroutine für den Spaltentitel aufrufen?
Will nicht bei dem Array-Durchlauf auch die Spaltentitel in der Ausgabe haben.
D'OH
Daniel
renee
 2007-09-19 18:12
#99700 #99700
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So wie Du für 6 Werte aus dem Array die Subroutine aufrufst, solltest Du für die Spaltentitel ebenfalls die Subroutine aufrufen.
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/
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2007-09-19 13:41.