fixe Stringlänge in PERL
Edmund Schöpf
0 Stefan Muenz0 Cheatah0 Jörk Behrends0 Cheatah
Wie kann ich einer Variablen in Perl eine fixe Länge aufzwingen?
Z.B. ist die Variable länger als 8 Zeichen, soll sie abgeschnitten werden. Ist sie kürzer als 8 Zeichen, dann sollen zusätzliche Leerzeichen eingefügt werden.
Kennt jemand ein Online Referenz Handbuch für Perl?
Besten Dank für jede Stellungnahme
Edmund
Hallo Edmund,
Wie kann ich einer Variablen in Perl eine fixe Länge aufzwingen?
Z.B. ist die Variable länger als 8 Zeichen, soll sie abgeschnitten werden. Ist sie kürzer als 8 Zeichen, dann sollen zusätzliche Leerzeichen eingefügt werden.
sub Mach8
{
$String = $_[0];
if(length($String) > 8) {
$String = substr($String,0,7);
}
elsif(length($String) < 8) {
for($i = length($String); $i < 8; $i++) {
$String = $String." ";
}
}
return $String;
}
Aufgerufen werden kann diese Sub-Routine dann:
$Test1 = Mach8("wenig");
$Test2 = Mach8("sehrviel");
$Test3 = Mach8("vielzuviel");
Das ist jetzt einfach aus'm Bauch raus geschrieben, koennen also Fehler drin sein.
viele Gruesse
Stefan Muenz
Hi,
sub Mach8
{
»» $String = $_[0];
»» if(length($String) > 8) {
$String = substr($String,0,7);
müßte das nicht ",0,8" sein? Naja, ein kurzer Test und... :-)
»» }
»» elsif(length($String) < 8) {
for($i = length($String); $i < 8; $i++) {
$String = $String." ";
}
oder:
while(length($String) < 8) { $String .= " "; } # bzw. $String = " ".$String; wenn die Leerzeichen links stehen sollen
Um die Routine an beliebige Längen anzupassen, mußt Du nur jede 8 durch "$_[1]" ersetzen bzw. die 7, wenn sie stimmt, durch "$_[1]-1". Es empfiehlt sich in dem Fall natürlich, die Routine "sub Mach" zu nennen. Der Aufruf erfolgt dann mit $Test = Mach("Das ist der Text",42); für Justierung auf 42 Zeichen.
Cheatah
Hallo auch ...
Hi,
sub Mach8
{
»» $String = $_[0];
»» if(length($String) > 8) {
$String = substr($String,0,7);müßte das nicht ",0,8" sein? Naja, ein kurzer Test und... :-)
»» }
»» elsif(length($String) < 8) {for($i = length($String); $i < 8; $i++) {
$String = $String." ";
}oder:
while(length($String) < 8) { $String .= " "; } # bzw. $String = " ".$String; wenn die Leerzeichen links stehen sollenUm die Routine an beliebige Längen anzupassen, mußt Du nur jede 8 durch "$_[1]" ersetzen bzw. die 7, wenn sie stimmt, durch "$_[1]-1". Es empfiehlt sich in dem Fall natürlich, die Routine "sub Mach" zu nennen. Der Aufruf erfolgt dann mit $Test = Mach("Das ist der Text",42); für Justierung auf 42 Zeichen.
Cheatah
wie wäre es denn mit:
sub Mach
{
substr( $_[0] . ' 'x$_[1], 0, $_[1]);
}
;-)
Gruß,
Jörk
Hi,
sub Mach
{
substr( $_[0] . ' 'x$_[1], 0, $_[1]);
}
und so optimieren wir uns immer weiter... Gratulation, kürzer kriegt es wohl kaum einer hin!
Dabei fallen mir zwei wichtige allgemeingültige Aussagen ein:
1.) Jedes Programm enthält mind. einen Bug.
2.) Jedes Programm läßt sich um mind. eine Anweisung reduzieren.
Schlußfolgerung: Jedes Programm läßt sich auf eine einzelne Anweisung reduzieren, die fehlerhaft ist!
Bei Microsoft habe ich manchmal das Gefühl, sie haben Punkt 1 unterstrichen und wollten von Punkt 2 das Gegenteil beweisen... :-)
Cheatah