Se connecter avec
S'enregistrer | Connectez-vous

[résolu]Importation de fichier csv vers mysql

Dernière réponse : dans Programmation

salut, je voudrais importer un fichier csv vers mysql maisdans le fichier csv il y a des champs qui sont des dates que je saisi au format JJ/MM/AAAA.
le problème est que mysql supporte le format ricain AAA/MM/JJ
je veux donc que ça convertisse directement le format des dates mais je ne sais pas comment faire.
dans mon fichier php je faisais
$query="LOAD DATA LOCAL INFILE '$chemin_fichier'
REPLACE INTO TABLE $nameTable
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'";

en ayant positionner les champs de ma table en date la où il le faut, j'obtiens des dates 0000/00/00 en bdd.
Comment faire pour convertir ces dates françaises en américain tout en gardant biensur une saisie en format français?
merci de votre aide.
Lassé par la pub ? Créez un compte

bon j'ai un petit début de solution mais ça ne marche que pour la première date
je m'explique :
je crée un fichier temporaire pour y mettre le contenu du fichier csv avec les dates converties.
je récupère les lignes du fichier et pour chacune je cherche la date suivant l'expression régulière.
je permute les éléments des dates et j'insère la nopuvelle ligne dans le fichier temporaire.
sauf qu'en remplacant avec ereg_replace, ça remplace chaque date trouvée par ma date convertie.

if (!($fichier_temp = fopen("C:/wamp/www/xlsmagique/liste/fichier.csv","w")))
echo "Echec de l'ouverture du fichier";
else
{
while(!feof($fp))
{ $ligne=fgets($fp, 10000);
$pattern = "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})";
if(ereg($pattern, $ligne, $tab))
{
$dateFR=$tab[3]."/".$tab[2]."/".$tab[1];
$nouvelle=ereg_replace($pattern, $dateFR, $ligne);
fwrite($fichier_temp, $nouvelle);
}
}
}

je me retrouve donc avec des dates converties mais seulement la première date est bonne, ensuite toutes les autres ont la meme valeur que la première.
comment faire pour remplacer chaque date par sa bonne valeur?

pour les intéressés voila la solution :
$pattern ="#([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})#";
while(!feof($fp))
{ $ligne=fgets($fp, 10000);
$nouvelle = preg_replace($pattern, '$3-$2-$1', $ligne);
fwrite($fichier_temp, $nouvelle);
}

utilisation de la fonction preg_replace
Lassé par la pub ? Créez un compte
Tom's guide dans le monde