DATETIME und CSV Import bei mysql

Norman Schwirz Schwirz.Linux-AG at freenet.de
Mo Sep 28 17:53:28 CEST 2009


Rene Lange schrieb:
>> Anno domini 2009 Rene Lange scripsit:
> 
>>> Hat jemand eine Idee, das Format automatisch richtig zu setzen, ohne 
>>> großen Aufwand? Es sind viele Dateien mit vielen Zeilen...
> 
>  a) mysqldump benutzen
>  b) Ein kleines Perlskript basteln, was das heile macht.
>    (Ich hatte hier gerade schon einen sed Einzeiler stehen, allerdings
>     könnte das damit in die Hose gehen ob der '09' -> '2009'
>     Transition, wenn auch Daten mit '98' oder so dabei sind. Daher
>     perl.)
>  c) phpmyadmin fixen.
> 
> Es gibt leider keine Option neben phpmyadmin. Es ist ein Hoster :/
> Werde wohl doch nicht drumrum kommen, die CSV Datei in ein PHP Skript zu
> laden und dort zu verarbeiten.
> 
> 
> Danke dennoch!
> 

Hallo Rene,

ich habe hier mal ein kleines Perl- Skript für dich und hoffe das du es
gebrauchen kannst:

---Convert-Date.pl---

#! /usr/bin/perl	# Mein Perl ist hier installiert :-)
# Konvertiere ein Datum in ein anderes Format. TT.MM.JJ hh:mm ->
JJJJ-MM-TT hh:mm

# print "Aufrufparameter: " . join(';', @ARGV) . "\n";
my $Date = $ARGV[0]." ".$ARGV[1];

#		Tage   . Monate . Jahre   _ Stunde : Minute->JJ-MM-TT hh:mm
if ($Date =~ s/(\d{2})\.(\d{2})\.(0\d{1})\s(\d{2})\:(\d{2})/20$3-$2-$1
$4:$5/) {	 # Jahre = 00, 01, 02 ..09     -> 20xx
} elsif ($Date =~
s/(\d{2})\.(\d{2})\.(\d{2})\s(\d{2})\:(\d{2})/19$3-$2-$1 $4:$5/) {	 #
alle anderen Jahre (10..99) -> 19xx
} else {
  print "# Ungültiger Wert! ";
}
print $Date."\n";

---

So sieht's dann aus:

$> ./Convert-Date.pl 28.02.96 23:15
1996-02-28 23:15

$> ./Convert-Date.pl 28.02.09 23:15
2009-02-28 23:15


Wenn du das ganze dann noch ein wenig eleganter haben willst, kannst du
ja noch eine Schleife um den If+Print- Block herum legen und anstatt der
Auswertung der Aufrufparameter ($ARGV) eine Datei oder die
Standardeinabe (<STDIN>) verarbeiten.

Dürfte dann in etwa so aussehen:

# ...
open (INFILE, "<" . $SourceFile) or die 'Kann Eingabedatei (' .
$SourceFile . ') nicht öffnen!\n';
@MyText = <INFILE>;

foreach $Date (@MyText) {
  # siehe oben ...
}

close(INFILE);

# Ende