DATETIME und CSV Import bei mysql

schwirz.linux-ag at freenet.de schwirz.linux-ag at freenet.de
Sa Mär 7 10:14:11 CET 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}).(0d{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






Heute schon ge"freeMail"t?
Jetzt kostenlose E-Mail-Adresse sichern!
http://email.freenet.de/dienste/emailoffice/produktuebersicht/basic/mail/index.html?pid=6831

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : Convert-Date.pl
Dateityp    : application/octet-stream
Dateigröße  : 560 bytes
Beschreibung: nicht verfügbar
URL         : http://www.tlug.de/pipermail/tlug_allgemein/attachments/20090307/4f5554ff/attachment.obj