Page 1 sur 1

Importation fichier CSV dans base mysql

Posté : 01 nov. 2012, 17:26
par Bruno0510
Bonjour,

Voila j'ai un fichier csv qui a cette structure :

128457|01/11/2012|Descriptif du texte|catégorie xyz

J'ai plusieurs soucis. J'arrive à transférer les champs dans une table mysql mais

La date "01/11/2012" ne veut pas s'inscrire dans un champs de type varchar(255) ou bien l'idéal dans un champs de type date [0000-00-00]

Deuxième soucis

Je n'arrive pas écrire un petit bout de script qui pourrait modifier la partie "categorie xyz" en "1" ou "2" ou "3" en fonction que la catégorie est x ou y ou z

Cela peut paraitre simple avec un IF mais je ne sais pas pourquoi cela ne marche pas

Merci infiniment de votre aide, je ne suis pas développeur php et là je surnage difficilement

Re: Importation fichier CSV dans base mysql

Posté : 01 nov. 2012, 20:16
par sirakawa
Je ne sais pas si ça suffira, mais il faudrait tenter de mettre les dates entre quotes; j'ai essayé avec un i
insert into dates set date = 12/10/2012;
ca donne un champ date à 0000-00-00
idem en quotant.

ceci fonctionne correctement:
insert into dates set date = '2012/10/31';

et ceci fait le boulot:
<?PHP
$date = "31/10/2012";
$morceau = strtok($date, "/");
$elements = array();
$elements['quantieme'] = $morceau;
for ($i = 1; $i <=2; $i++)
{
	$morceau = strtok("/");	
	if ($i ==1)
	{
		$elements['mois'] = $morceau;
	}
	else
	{
		$elements['annee'] = $morceau;
	}
}
print_r($elements); // juste pour vérifier quand j'ai pondu la chose
$date_reformatee = $elements['annee']."-".$elements['mois']."-".$elements['quantieme']; //tu peux mettre "/" si tu préfères, ça fonctione aussi
print "<br>$date_reformatee";
?>
ou plus simple:
<?PHP
$date = "31/10/2012";
$morceau = strtok($date, "/");
$date_my = $morceau;
for ($i = 1; $i <=2; $i++)
{
	$morceau = strtok("/");	
	$date_my = $morceau."/".$date_my;
}

print "$date_my";
?>
pour ta deuxième question, penche-toi sur switch; c'est plus simple à manipuler que des if emboîté s( mets un default à tout hasard au cas où tu aurais des enregistrements où catégorie n'est pas renseignée)
switch ($categorie_lue_dans_le_csv)
{
case "x":
$categorie_pour_mysql = 1
break;
//etc
}

Re: Importation fichier CSV dans base mysql

Posté : 01 nov. 2012, 20:49
par moogli
effectivement les champs date sotn considéré comme des champs "texte", leur valeur est donc une chaîne de caractères.

par contre le format doit être le format anglais, donc YYYY-MM-dd il va donc falloir "transformer" la date dans ce format.
soit tu te fait une fonction pour la "transformation" soit tu utilise la classe DateTimede php.

quand au reste montre nous le code que tu as déja fait et l'on pourras t'aider, sinon c'est de l'ordre de la divination est la c'est un poil hors compétence ;)



@+

Re: Importation fichier CSV dans base mysql

Posté : 02 nov. 2012, 14:26
par Alotenango1
Merci infiniment à vous

Pour la date, j'ai trouvé ... ouf ...

Mais alors pour le contenu d'une variable alors là cela ne marche pas et pourtant ce doit être simple
Je lis $col4 dans le fichier CSV et ça marche, il y a bien le bon contenu dedans

// Transformation de la catégorie
If ($col4 == "Seine et Marne")
$col7 = 77;

If ($col4 == "Seine Saint Denis")
$col7 = 93;

etc ...

// Transformation de la date
// La date dans le fichier est au format "01/11/2012"
$dateformat = substr($col2,6,4) . "-" . substr($col2,3,2) . "-" . substr($col2,0,2);
$col2 = $dateformat;

MErci à vous de votre aide

Re: Importation fichier CSV dans base mysql

Posté : 02 nov. 2012, 15:07
par sirakawa
Tu es sûr que tes dates sont comme "01/12/2012"? parce que sans ça tu auras tout faux avec substr. C'est pour ça que j'utilisais strtok qui se fie au séparateur....
pour les départements:
si $col4 est la valeur lue, tenter
$t_deps = array(1=>"ain", "aisne", "allier", ....); // volontairement en minuscules
$dep_lu = strtolower (trim($col4));
$code_dep = array_search($dep_lu, $t_deps);
Si ça ne suffit pas, il existe une fonction écrite par un utilisateur de PHP pour régulariser les espaces intérieurs.