Bonjour,
Dans le cadre de mon projet de stage, je dois lire un fichier CSV puis le traiter. Plus précisément le traitement consiste à :
1 - lire le fichier,
2 - utiliser des expressions régulières pour reconnaitre les lignes,
3 - inséré le tous en base de données.
Rien de bien difficile au final, mais c'est à la troisième étape que sa coince !
En faite j'ai une ligne du type suivant : 871;257322;171957;0,6666;;;;
L'expression la reconnait sans problème mais le souci, c'est quand le tout est inséré dans la base, le chiffre a virgule ne passe pas ! Je précise qu'aucune erreur est généré et que le résultat enregistré est 0.0000
Dans ma base, le champ pour cette donnée est de type float(10,9)
J'ai déjà essayé beaucoup de chose pour remédier a se problème et je n'arrive toujours pas à remplacer la , par un . avant la requête d'insertion.
Voici mon bout de code avec la dernière chose que j'ai testé pour changer la virgule, il se peut qu'il y est des erreurs :
J'espère que je vous ai pas trop embrouillé avec toute mes explication et que le problème posé est clair !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $link = mysql_connect("localhost", "root", ""); if (!$link) { die('Connexion impossible : ' . mysql_error()); } else { mysql_select_db('pharmagen'); $fic = fopen($content_dir.$name_file, 'a+'); while(!feof($fic)) { $ligne= fgets($fic,1024); if (preg_match('#(\d{3});(\d{3,6});(\d{3,6});(0[,\.]\d{2,9});;;;#',$ligne)) { list ($numO, $nbbd, $nbbdg, $tdgc) = explode(';', $ligne); $taudgc=number_format($tdgc, 9, '.', ''); $sql = "INSERT INTO objectiforganisme VALUES ('4433', '$nbbd', '$nbbdg', '$taudgc','', '$numO');"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); } } } fclose($fic); unlink($content_dir.$name_file); mysql_close($link);
Si un sujet existe déjà, je m'en excuse mais je n'ai pas réussi à le trouver
Partager