Regulärer Ausdruck für Datumsanpassung
xpfreund
- perl
Hallo,
also in einer DB, bei der ich das Datumsformat nicht ändern kann, steht ein Datum "20100712".
Jetzt hab ich bisher immer per Substr die einzelnen Teile, also Jahr,... rausgezogen und dann als neuen String im Format "12.07.2010" zusammengesetzt.
Da ich jetzt in meinem Skript schon einige Male mit Reguären Ausdrücken konfrontiert war, würde ich gerne wissen, ob und wie man das schreiben kann, das der Formatwechsel mit Regulären Ausdrücken funktioniert.
gruß aus Senftenberg am See
Hi,
also in einer DB, bei der ich das Datumsformat nicht ändern kann, steht ein Datum "20100712".
Jetzt hab ich bisher immer per Substr die einzelnen Teile, also Jahr,... rausgezogen und dann als neuen String im Format "12.07.2010" zusammengesetzt.
Gut. Dann bleib dabei.
Da ich jetzt in meinem Skript schon einige Male mit Reguären Ausdrücken konfrontiert war, würde ich gerne wissen, ob und wie man das schreiben kann, das der Formatwechsel mit Regulären Ausdrücken funktioniert.
Wozu?
Reguläre Ausdrücke sind zur Mustersuche gedacht, insb. auch von Mustern mit variabler Länge.
Dein Datumsformat ist aber absolut statisch, du weißt von jedem Bestandteil genau, wo er steht und wie lang er ist.
MfG ChrisB
Hallo,
Gut. Dann bleib dabei.
Schade, hätte ja sein können, dass man sich n paar Zeilen sparen kann, hat ja bei meiner alltrim-Funktion auch geklappt, die aber eben auch keine statischen Daten bekommt.
Trotzdem danke für die schnelle Antwort.
gruß aus Senftenberg am See
Moin!
Schade, hätte ja sein können, dass man sich n paar Zeilen sparen kann
<?php
$datum='20100714';
echo substr($datum,6,2).'.'.substr($datum,4,2).'.'.substr($datum,0,4)."\n";
?>
Wie willst Du hier noch "n paar Zeilen sparen"?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hallo,
<?php
$datum='20100714';
echo substr($datum,6,2).'.'.substr($datum,4,2).'.'.substr($datum,0,4)."\n";
?>
>
> Wie willst Du hier noch "n paar Zeilen sparen"?
Klar, Brett vorm Kopf.
Hatte immerso:
~~~perl
my($day)=substr($4,6,2);
my($month)=substr($4,4,2);
my($year)=substr($4,0,4);
my($date)=$day.'.'.$month.'.'.$year;
und wenn substr schneller ist, dann bleib ich natürlich dabei.
Aber trotzdem mal gut zu wissen, wie man das regulär aufbaut, falls die Sachen doch mal komplizierter werden.
gruß aus Senftenberg am See
also in einer DB, bei der ich das Datumsformat nicht ändern kann, steht ein Datum "20100712".
Jetzt hab ich bisher immer per Substr die einzelnen Teile, also Jahr,... rausgezogen und dann als neuen String im Format "12.07.2010" zusammengesetzt.
Da ich jetzt in meinem Skript schon einige Male mit Reguären Ausdrücken konfrontiert war, würde ich gerne wissen, ob und wie man das schreiben kann, das der Formatwechsel mit Regulären Ausdrücken funktioniert.
substr() ist immer schneller als eine Reguläre Expression.
Nur wenn du Userinput untainten musst, bisst du auch bei Daten statischer Länge auf eine reguläre Expression angewiesen.
Ich sehe nicht, welche Zeilen du mit m// gegenüber substr() sparen willst.
mfg Beat
hi,
substr() ist immer schneller als eine Reguläre Expression.
Noch schneller ist unpack(), weil das auf byte-Ebene tutet:
my ($y,$d,$m) = unpack('A4A2A2','20100712');
Horst Packer
pack/unpack arbeiten auf Zeichen-, nicht (ausschließlich) Byteebene, Beweis im Codeblock unten. Der wahre Grund für die Geschwindigkeit liegt darin, dass sie verglichen mit den üblichen Perlfunktionen so primitiv und merkmalsarm sind.
> perl -CAO -E'say for unpack q(A1A2A3), $ARGV[0]' 一二三四五六七八九十
一
二三
四五六
hi,
Da ich jetzt in meinem Skript schon einige Male mit Reguären Ausdrücken konfrontiert war, würde ich gerne wissen, ob und wie man das schreiben kann, das der Formatwechsel mit Regulären Ausdrücken funktioniert.
Jow, wenns denn sein mus ;-)
my $d = 20100712;
$d =~ /^(\d{4})(\d{2})(\d{2})$/;
print "$3.$2.$1\n";
Horst Klugscheiser