Leser: 1
|< 1 2 3 >| | 21 Einträge, 3 Seiten |
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/perl use strict; use warnings; chomp( my $text = <STDIN> ); my $width = 30; my ($rand) = int( ($width - length $text) / 2 ); my $format = ">>%*s%s%*s<<"; print sprintf $format, $rand, ' ', $text, ($width - length($text) - $rand), ' ';
printf("%-10s %06d %20s\n", $variable1, $variable2, $variable3);
Duff+2007-09-19 12:00:30--Danke für die schnelle Antwort, aber kannst du vielleicht noch ein paar Schritte dazu erklären?
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
#!/usr/bin/perl # das sollte klar sein ;) use strict; use warnings; # hole den Text chomp( my $text = <STDIN> ); # So breit soll das "Fenster" für den Text insgesamt sein my $width = 30; # berechne den linken rand my ($rand) = int( ($width - length $text) / 2 ); # das Format: # %*s => ein String (%s), dessen Länge erst noch festgelegt werden muss (*) # %s => der eigentliche Text # %*s => der rechte Rand, im Prinzip das gleiche wie beim ersten Format-Teil my $format = ">>%*s%s%*s<<"; # gebe den Text aus... # übergebe an sprintf folgende Parameter: # breite des linken Rands (ersetzt das erste *) # Leerzeichen (als "Text" für den linken Rand) # der eigentliche Text # Breite des rechten Rands (ersetzt das zweite *) # Leerzeichen (als "Text" für den rechten Rand) print sprintf $format, $rand, ' ', $text, ($width - length($text) - $rand), ' ';
QuoteWie würde ich das ganze denn realisieren müssen, wenn ich vorhern ein printf benutze, das ungefähr so aussieht:
Code: (dl )printf("%-10s %06d %20s\n", $variable1, $variable2, $variable3);
z.B. sollen dann die $variable2 zentriert dargestellt werden.
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 = 30; for my $ref ( @values ){ print_formatted( $length, @$ref ); } sub print_formatted{ my ($max,$t1,$zahl,$t2) = @_; $zahl = sprintf '%06d', $zahl; my ($rand) = int( ($max - length $zahl) / 2 ); my $left = $rand - length $t1; my $format = "%s%*s%s%*s%s\n"; print sprintf $format, $t1,$left,' ',$zahl,$left,' ',$t2; }
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; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/perl use strict; use warnings; my @values = ( [ 1, 1, 'value1' ], [ 2, 20, 'value2' ], [ 3, 2000, 'value3' ], ); print "spalte1 spalte2 spalte3\n", "-----------------------\n"; for my $value ( @values ) { format STDOUT = @<<<<<< @|||||| @>>>>>> $value->[0], $value->[1], $value->[2] . write; }
|< 1 2 3 >| | 21 Einträge, 3 Seiten |