PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Komma in Zahlenreihe setzen



SuiRIS
10-04-2007, 12:11
Hallo zusammen.
mein Problem ist folgendes. Ich habe eine Zahlenreihe:

45.993
46.009
46.025
46.057
46.073
46.105
46.105
4.612
46.168
46.184
4,62
4,62
46.232
46.232
Bei dieser Zahlenreihe soll nun die Punkte entfernt und an zweiter Stelle ein Komma gesetzt werden. Am Ende soll es etwa so aussehen:


4,6009
4,6025
4,6057
4,6073
4,6105
4,6105



Meine bisheriger Versuch, nur komm ich leider nicht weiter.

# Name der einzulesenden Datei wird über die Kommandozeile eingegeben
print "\n\n==== Eingabeaufforderung ====\n\n";
print "Namen der zu oeffnenden Datei: ";
$datei = <STDIN>;
chomp $datei;


# Datei öffnen und in einem Array speichern
# Ist die Datei nicht vorhanden, gibt "die" eine Fehlermeldung aus
open(FILE, "<$datei")|| die "\nFehler, die Datei existiert nicht. \n\n";
@datei_inhalt = <FILE>;
close(FILE);


# alle Punkte . im Array entfernen
foreach(@datei_inhalt){
$_ =~ s/\.//gc;
}

# alle Kommas , im Array entfernen
foreach(@datei_inhalt){
$_ =~ s/\,//gc;
}


# Zahl vor dem Komma in Array speichern
foreach $x (@datei_inhalt){
push(@anfang, $position1 = substr($x, 0, 1));
}

# drei Zahlen nach dem Komma in Array speichern
foreach $x (@datei_inhalt){
push(@ende, $position2 = substr($x, 1, 3));
}

$komma = "\,";

# Zusammenfügen der Anfang + Komma
foreach $y (@anfang){
$y.=$komma;
}




Doch wie nun Anfang (+ Komma) mit dem Ende zusammenfügen? Hab versucht zwei foreach-schleifen inneinander zu wursteln klappt aber nicht so recht.

Hat jemand eine Idee?

Molaf
10-04-2007, 22:12
Wie ich das sehe, veränderst Du ja mutwillig den Zahlenwert, wenn das Komma(/Punkt) ersatzlos gestrichen wird, also das Komma stur hinter die erste Ziffer gesetzt wird.

Das geht aber auch so:
Wenn Du eh in der Schleife bist, um den Punkt zu erledigen:

$_ =~ s/\.//gc;
kannst Du gleich noch mit

$_ = substr($_, 0, 1) . ',' . substr($_, 1) ;
den Rest erledigen, dann musst Du die Schleife nicht mehrmals aufrufen-

reneeb
11-04-2007, 07:06
Einzelne Zeichen ersetzt man besser mit tr///. Ist schneller...



my $zahl = 33.333;
$zahl =~ tr/.//d;
print $zahl;

SuiRIS
11-04-2007, 07:40
Danke ihr beiden! Klappt super :-)