Dienstag, 27. April 2010

Cerlcius / Fahrenheit umrechnen mit regex

Da ich auch nebenbei ein regex-Buch durcharbeite, stoße ich auch dort auf Perl. Diese Programmiersprache ist sehr gut zur Nutzung von regulären Ausdrücken geeignet. Das folgende Programm erkennt durch regex, was für ein Temperaturtyp eingegeben wurde (C oder F), und rechnet ihn dann in den anderen um.


#!/usr/bin/perl -w
# Celcius in Fahrenheit umwandeln und umgekehrt
# http://perl-lernen.blogspot.com/
print "\nGeben Sie bitte eine Temperatur ein (zb 34C, 78F): ";
$temp=;
chomp ($temp);
# Pruefen, ob ein Wert in gewuenschtem Format angegeben wurde
# Die regex ist durch die inneren 2 Klammerpaare in 2 Teile eingeteilt
# Der Variablen $1 wird der Zahlenwert zugewiesen
# Der Variablen $2 wird der Buchstabe C oder F zugewiesen.
if ($temp =~ m/^([-+]?[0-9]*\.?[0-9]+)\s*([CF])$/i)
{
# Nun schreiben wir die durch die obige regex ausgelesenen Werte in feste Variablen rein
# Dies ist wichtig, da $1 und $2 bei der nächsten Verwendung von "=~" wieder überschrieben werden!
$zahl=$1;
$typ=$2;
# Falls C oder c hinter der Zahl eingegeben wurde:
if ( $typ =~ m/c/i)
{
$celcius = $zahl;
$fahrenheit = ( $celcius * 9 / 5) + 32;
}
# Andernfalls; ergo wurde F oder f als Kennung benutzt:
# eine explizite Pruefung auf F oder f ist unnoetig, da schon durch regex erledigt
else
{
$fahrenheit = $zahl;
$celcius = ( $fahrenheit - 32) * 5 / 9;
}
# Ausgabe der Ergebnisse:
printf "%.2f Celcius = %.2f Fahrenheit\n",$celcius,$fahrenheit;
}
# Ungueltiger Wert oder Buchstabe eingegeben:
else
{
printf "Ungueltiger Wert eingegeben; Abbruch!\n";
}

Keine Kommentare:

Kommentar veröffentlichen