[gelöst] Perl - Variable farbig ausgeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mullers

[gelöst] Perl - Variable farbig ausgeben

Beitrag von mullers » 15.10.2008 14:46:54

Hi,

wie kann ich in dem folgenden perl Skript die Variablen $result und $result1 farbig ausgeben, und nur die. Ich bekomme es nur hin, dass die ganze letzte Zeile farbig ist.

Code: Alles auswählen

#!/usr/bin/perl

use Term::ANSIColor;

$fg = qw(yellow);

print "Wieviel Tage hat der Monat bis jetzt?\n";
chomp ($zahl1 = <STDIN>);
print "Wie ist der Stand Ihrer Haushaltsausgaben in diesem Monat?\n";
chomp ($zahl2 = <STDIN>);
print "Wieviel Tage hat der gegenwärtige Monat insgesamt?\n";
chomp ($zahl3 = <STDIN>);
$Ergebnis = ($zahl2 / $zahl1) * $zahl3;
$Ergebnis1 = $zahl2 / $zahl1;
$result1 = sprintf("%.2f", $Ergebnis1);
$result = sprintf("%.2f", $Ergebnis);
print ("Die durchschnittliche Ausgabe für einen Tag beträgt etwa
$result1 . Wenn das so weitergeht, werden Sie am Ende des Monats
~ $result € ausgegeben haben.\n"); 
Gruesse
henry
Zuletzt geändert von mullers am 15.10.2008 16:48:58, insgesamt 1-mal geändert.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: Perl - Variable farbig ausgeben

Beitrag von nepos » 15.10.2008 16:27:19

Du musst die Farben wieder resetten:

Code: Alles auswählen

use Term::ANSIColor qw(:constants);
print "Blablabla", YELLOW, " das ist nun gelb", RESET, " hier gehts normal weiter.\n";
Btw, du solltest dir auch angewöhnen, in deinen Skripten use strict; und use warnings; zu benutzen. Das spart einiges an Ärger ;)

Benutzeravatar
Sid Burn
Beiträge: 47
Registriert: 16.11.2006 15:18:02
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /universe/earth/europe/germany/nrw/essen
Kontaktdaten:

Re: Perl - Variable farbig ausgeben

Beitrag von Sid Burn » 15.10.2008 16:29:23

Term::ANSIColor hat zwei Interfaces. Einmal kannst du Konstanten Exportieren die dir die Farben setzen, und einmal hast du Funktionen zum setzen. Ich bevorzuge letzteres.

Du hast dann zwei Funktionen "color()" und "colored()".

color() gibt den ANSI Code für deine Farbe zurück. Wenn du diesen mittels print() ausgiebst dann ist deine Ausgabe
fest auf diese Farbe gesetzt. Wenn du irgendwann die Farbe wieder wechseln willst kannst du color() mit einer neuen Farbe aufrufen oder "print color('reset')" um deine Farbauswahl zu löschen.

colored() macht nur einen String farbig, ist also optimal wenn du nur teile farbig machen möchtest.

---

Ansonsten noch zu deinem Skript:

1) Du solltest dir von anfang an angewöhnen "use strict;" und "use warnings;" zu benutzen da es sehr viele Fehler abfängt.
2) Wahrscheinlich wirst du doch mindestens Debian Etch, oder neuer nutzen? Dann sollte dein System UTF-8 sein. Damit du mit
utf8 keine Probleme hast solltest du noch folgendes hinzufügen:

Code: Alles auswählen

use utf8;
use open ':utf8';
use open ':std';
Die erste Zeile gibt an das der Sourcecode UTF-8 Codiert ist. Die zweite Zeile gibt an das alle I/O Sachen automatisch ein UTF-8 Layer nutzen. Und die dritte Zeile aktiviert dann auch auf STDIN, STDOUT, STDERR UTF-8 (Die letzte Zeile ist etwas "komplexer" aber das sollte für den anfang genügen).

3) Du solltest aussagekräftige Variablennamen verwenden.

---

Ich habe dir mal eine neue Version auf grundlage deines Codes geschrieben.

Code: Alles auswählen

#!/usr/bin/perl
# Core Modules
use strict;
use warnings;
use utf8;
use open ':utf8';
use open ':std';
use Term::ANSIColor;

my $text_color = 'yellow';

print "Wieviel Tage hat der Monat bis jetzt?\n";
chomp (my $tage = <STDIN>);

print "Wie ist der Stand Ihrer Haushaltsausgaben in diesem Monat?\n";
chomp (my $ausgaben = <STDIN>);

print "Wieviel Tage hat der gegenwärtige Monat insgesamt?\n";
chomp (my $tage_gesamt = <STDIN>);

my $durchschnitt_ausgaben  = sprintf('%.2f', $ausgaben / $tage);
my $prognose_ausgabe       = sprintf('%.2f', ($ausgaben / $tage) * $tage_gesamt);

# Farben hinzufügen
$durchschnitt_ausgaben = colored($durchschnitt_ausgaben, $text_color);
$prognose_ausgabe      = colored($prognose_ausgabe, $text_color);

print
    "Die durchschnittliche Ausgabe für einen Tag beträgt etwa: $durchschnitt_ausgaben €\n",
    "Wenn das so weitergeht, werden Sie am Ende des Monats $prognose_ausgabe € ausgegeben haben.\n";
---

Eventuell ist es noch etwas zu hoch für dich aber den aktuellen Tag und anzahl der Tage im Monat kannst du gut mit dem Modul DateTime heraus bekommen.

Code: Alles auswählen

use DateTime;
my $today = DateTime->today;

my $tag         = $today->day_of_month;
my $tage_gesamt = DateTime->last_day_of_month(
    year  => $today->year, 
    month => $today->month,
)->day_of_month;

print "Heute: $tag\n";
print "Gesamt: $tage_gesamt\n";

mullers

Re: Perl - Variable farbig ausgeben

Beitrag von mullers » 15.10.2008 16:48:06

Danke! Und noch eins: ! :D
Is' mein erster Tag mit Perl und geht schon mal sehr gut los.

henry

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: [gelöst] Perl - Variable farbig ausgeben

Beitrag von nepos » 15.10.2008 17:33:05

Btw, wenn du öfter mal Fragen zu Perl hast, auf Perl-Community.de wird einem auch recht gut geholfen und das Wiki dort hat auch den ein oder anderen hilfreichen Tipp parat.

Antworten