PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] Zahl in Dateiname/String einsetzen



Caveman
15-02-2006, 16:49
Hallo *,

ich möchte aus einem String mehrere Dateinamen erzeugen, die sich jeweils in einer Zahl unterscheiden:

aus mrtg.temp.cfg
wird dann mrtg.temp01.cfg, mrtg.temp02.cfg usw.

Versucht habe ich das (etwas umständlich) bisher so:

MrtgCfgFileName(++$i) # Aufruf

sub MrtgCfgFileName # Unterprogramm
{
# Erstellt den Namen fuer die mrtg.cfg-Dateien
my @mrtgcfgfile;

@mrtgcfgfile = split /\./, Mrtgcfg; # Punkt als Trennzeichen
$mrtgcfgfile[$#mrtgcfgfile-1] .= sprintf "%02d", $_[0]; # Zahl einfuegen
join ".", @mrtgcfgfile; # Dateinamen zurueckgeben
}Gibt es dafür eine kürzere Lösung mit regulären Ausdrücken? Einen Einzeiler, wenn möglich.
Nochmal zusammengefasst: Es soll vor dem letzten Punkt eine zweistellige Zahl eingefügt werden.

Danke schon mal für Lösungsansätze

reneeb
16-02-2006, 00:07
So könnte man es machen:
#!/usr/bin/perl

use strict;
use warnings;

my $i = 0;
my $file = 'mrtg.temp.cfg';
my $suffix = '.cfg';

(my $newfile = $file) =~ s~\.cfg$~sprintf("%02d",++$i).$suffix~e;
print $file," // ",$newfile,"\n";

Das hier dürfte aber noch etwas schneller sein:
#!/usr/bin/perl

use strict;
use warnings;

my $i = 0;

my $versuch = 'mrtg.temp.cfg';
$versuch = substr($versuch,0,rindex($versuch,'.')).
sprintf("%02d",++$i).
substr($versuch,rindex($versuch,'.'));

print $versuch;

Caveman
16-02-2006, 00:45
Toll :)
Die zweite Variante gefällt mir.

Die erste hat den Nachteil, das die Erweiterung bekannt sein muss.
(Ich möchte den Dateinamen nur einmal im Programm verwenden und das ist am Anfang als Konstante.)

Danke.