String mit Tabulatoren: Wie richtig alignen?

String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 20:20:31 von frank

Hallo,

folgendes Skript zeigt das Problem:

#!/usr/bin/perl

use strict;
use warnings;

my @list = ("short","ratherlongstring");
my @formattedList;

foreach my $name (@list) {
my $line = "Name: " . $name . "\t something\n";
push @formattedList, $line;
}

print @formattedList;
__END__

Die Ausgabe ist:

Name: short something
Name: ratherlongstring something

Ich hätte aber gerne:

Name: short something
Name: ratherlongstring something

Ich könnte damit leben, absolute Positionen, bzw. etwas wie "gehe zum
dritten Tabstop-Punkt in der Zeile" anzugeben. Es braucht also keine
Magie sein, die die Länge des längsten Elements ausmisst und so. Es
reicht also, wenn die Breite der Felder fest verdrahtet ist.

Nur habe ich keine Ahnung, wie man das überhaupt macht, oder wo es
steht.

TIA, Frank
--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.

Re: String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 21:17:41 von Frank Seitz

Frank Küster wrote:

[Text an Tabstops ausrichten]

> Nur habe ich keine Ahnung, wie man das überhaupt macht, oder wo es
> steht.

Wenn Du Text an Tabstops ausrichten willst, bist Du auf Dich selbst
gestellt, dafür hat Perl meines Wissens keine direkte Unterstützung.
Bleibt Selbstprogrammieren oder CPAN abgrasen.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 21:36:46 von Slaven Rezic

Frank Küster writes:

> Hallo,
>
> folgendes Skript zeigt das Problem:
>
[...]
>
> Die Ausgabe ist:
>
> Name: short something
> Name: ratherlongstring something
>
> Ich hätte aber gerne:
>
> Name: short something
> Name: ratherlongstring something
>
> Ich könnte damit leben, absolute Positionen, bzw. etwas wie "gehe zum
> dritten Tabstop-Punkt in der Zeile" anzugeben. Es braucht also keine
> Magie sein, die die Länge des längsten Elements ausmisst und so. Es
> reicht also, wenn die Breite der Felder fest verdrahtet ist.
>
> Nur habe ich keine Ahnung, wie man das überhaupt macht, oder wo es
> steht.
>

Text::Table ist ganz nett, wenn man es "perfekt" haben will.

--
Slaven Rezic - slaven rezic de

Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/

Re: String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 22:04:59 von Mirco Wahab

Thus spoke Frank Küster (on 2006-06-07 20:20):

> Name: short something
> Name: ratherlongstring something
>
> Ich könnte damit leben, absolute Positionen, bzw. etwas wie "gehe zum
> dritten Tabstop-Punkt in der Zeile" anzugeben. Es braucht also keine
> Magie sein, die die Länge des längsten Elements ausmisst und so. Es
> reicht also, wenn die Breite der Felder fest verdrahtet ist.
>
> Nur habe ich keine Ahnung, wie man das überhaupt macht, oder wo es
> steht.

Eine Variante wäre, Module zur Formatierung zu
verwenden (-> Slavens Beitrag), Du kannst aber
den Effekt auch mit
sprintf "%*s", $laenge, $string
erreichen.

Unter minimaler Veränderung Deines Quelltextes:

#!/usr/bin/perl

use strict;
use warnings;

my @list = qw(short ratherlongstring);
my @formattedList;

my $maxlen = ( sort{$b<=>$a} map{length}@list )[0];

foreach my $name (@list) {
my $format = "Name:\t%*s\tsomething\n";
push @formattedList, sprintf $format, $maxlen, $name;
}

print @formattedList;
__END__


Viele Grüße

Mirco

Re: String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 22:09:22 von Mirco Wahab

Thus spoke Mirco Wahab (on 2006-06-07 22:04):

Zusatz:

> my $format = "Name:\t%*s\tsomething\n";

Schreibt:
Name: short something
Name: ratherlongstring something

wogegen:

my $format = "Name:\t%-*s\tsomething\n";

die Ausgabe:
Name: short something
Name: ratherlongstring something

liefert.

Viele Grüße

Mirco

Re: String mit Tabulatoren: Wie richtig alignen?

am 07.06.2006 22:29:44 von Frank Seitz

Mirco Wahab wrote:
> Thus spoke Mirco Wahab (on 2006-06-07 22:04):
>
> Zusatz:
>
>> my $format = "Name:\t%*s\tsomething\n";
>
> Schreibt:
> Name: short something
> Name: ratherlongstring something
>
> wogegen:
>
> my $format = "Name:\t%-*s\tsomething\n";
>
> die Ausgabe:
> Name: short something
> Name: ratherlongstring something
>
> liefert.

In beiden Fällen besteht der Leerraum allerdings aus
Tabs und Leerzeichen. Wenn er nur Tabs will,
helfen ihm printf-Formatelemente nicht weiter.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: String mit Tabulatoren: Wie richtig alignen?

am 08.06.2006 09:34:28 von frank

Frank Seitz wrote:

> Mirco Wahab wrote:
>> Thus spoke Mirco Wahab (on 2006-06-07 22:04):
>>
>> Zusatz:
>>
>>> my $format = "Name:\t%*s\tsomething\n";
>>
>> Schreibt:
>> Name: short something
>> Name: ratherlongstring something
>>
>> wogegen:
>>
>> my $format = "Name:\t%-*s\tsomething\n";
>>
>> die Ausgabe:
>> Name: short something
>> Name: ratherlongstring something
>>
>> liefert.
>
> In beiden Fällen besteht der Leerraum allerdings aus
> Tabs und Leerzeichen. Wenn er nur Tabs will,
> helfen ihm printf-Formatelemente nicht weiter.

Ja, aber das ist relativ egal. Vielen Dank an alle,

Frank

--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.