hi!
Irgendwo weiter unten hatten wir dieses Thema. Ich habe mal versucht, ein passendes Skript zu schreiben. Anscheinend funktioniert es, ich habe schon ein bisschen damit rumprobiert. 100%-ig sicher bin ich aber noch nicht. Also füttert es mit den abwegigsten Zahlen, um es zu testen (die Null habe ich nicht eingebaut!).
Zur Bedienung:
* Aufruf auf der Kommandozeile mit der Zahl als erstem Parameter: betrag.pl 123345
Eingabe der Zahl:
* keine führenden Nullen
* keine Kommazahlen
* nicht Null
* höchstens 36 Stellen
Ok, viel Spaß, ich hoffe es funktioniert.
=== cut ===
#!/usr/bin/perl
@einer = ("", "ein", "zwei", "drei", "vier", "fünf", "sech", "sieben", "acht", "neun");
@eeiner = ("", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun");
@zeiner = ("", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn");
@heiner = ("", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun");
@zehner = ("", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig");
@namen = ("", "tausend ", " Millionen ", " Milliarden ", " Billionen ", " Billiarden ", " Trillionen ", " Trilliarden ",
" Quadrillionen ", " Quadrilliarden ", " Quintillionen ", "Quintilliarden ");
for (reverse split /-/, &teilen3(shift))
{
my $string;
($ein, $zehn, $hun) = reverse split /-/, &teilen1($_);
$string = $hun ? "$heiner[$hun]hundert" : "";
if ($zehn > 1)
{
$string .= $ein ? "$einer[$ein]und$zehner[$zehn]" : "$zehner[$zehn]";
}
if ($zehn == 1)
{
$string .= "$zeiner[$ein]";
}
if ($zehn < 1)
{
$string .= "$eeiner[$ein]";
}
push @teile, $string;
}
for (@teile)
{
$string = $_ . $namen[$i] . $string;
$i++;
}
print $string;
sub teilen3
{
my $text = reverse shift;
$text =~ s/(\d\d\d)(?=\d)(?!\d*.)/$1-/g;
return scalar reverse $text;
}
sub teilen1
{
my $text = shift;
$text =~ s/(\d)(\d)/$1-$2/g;
$text =~ s/(\d)(\d)/$1-$2/g;
return $text;
}
=== cut ===