Schrift
[thread]10527[/thread]

Ausgabe von Fileliste in Spalten

Leser: 1


<< >> 7 Einträge, 1 Seite
harvey
 2007-10-06 15:36
#100390 #100390
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
Hallo,

gibt es eigentlich ein Modul, mit dem ich ein array, das eine Filenamensliste o.ä. enthält, in Spalten ausgeben kann, so wie bei ls (d.h. Spaltenzahl abhängig von max. Stringlänge pro Spalte und natürlich aktueller Terminalbreite).
ptk
 2007-10-06 15:56
#100392 #100392
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
harvey
 2007-10-06 17:15
#100404 #100404
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
ptk+2007-10-06 13:56:37--
CPAN:Text::Table


Hmm, nicht ganz, denn hier muß ich ja die Anzahl der Spalten angeben und welcher String in welche Spalte gehört. Ich will aber einfach das gesamte array als Argument übergeben und die Routine soll sich (abhängig von Terminalbreite und Stringlänge) selbst ausrechnen in wievielen Spalten es den Text ausgibt. Genauso wie ls das halt macht...
ptk
 2007-10-06 18:24
#100406 #100406
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ach so. Ein Modul ist mir nicht bekannt. Man könnte es so lösen
Code: (dl )
1
2
perl -Mstrict -MList::Util=max -e 'my @a=@ARGV;my $max=max map { length } @a; my $col = 0; while(my $a = shift @a) { $col+=(1+$max); if ($col >= 80) { $col = (1+$max); print "\n" } print $a." "x(1+$max-length($a))} print "\n"' ..
.
harvey
 2007-10-06 19:10
#100412 #100412
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
ptk+2007-10-06 16:24:56--
Ach so. Ein Modul ist mir nicht bekannt. Man könnte es so lösen
Code: (dl )
1
2
perl -Mstrict -MList::Util=max -e 'my @a=@ARGV;my $max=max map { length } @a; my $col = 0; while(my $a = shift @a) { $col+=(1+$max); if ($col >= 80) { $col = (1+$max); print "\n" } print $a." "x(1+$max-length($a))} print "\n"' ..
.


Prima. So geht's. :)

Jetzt brauche ich nur noch eine Systemvariable, die mir sagt, wie breit mein Terminal gerade ist (KDE-konsole, die kann ich ja in der Breite verändern.)

Habe es mal so umgeschrieben:
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 List::Util qw(max);

my $TERMWIDTH=80;
open(FILE, "bla");
my @a=<FILE>;
close(FILE);
chomp(@a);

my $max=max map { length } @a;
my $col = 0;
while(my $a = shift @a) {
        $col+=(1+$max);
        if ($col >= $TERMWIDTH) {
                $col = (1+$max);
                print "\n";
        }
        print $a." "x(1+$max-length($a));
}
print "\n";
ptk
 2007-10-06 19:11
#100413 #100413
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Term::ReadKey hat die Funktion GetTerminalSize
harvey
 2007-10-06 20:21
#100420 #100420
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
Suuuper! Dankeschön!
<< >> 7 Einträge, 1 Seite



View all threads created 2007-10-06 15:36.