Remplir une base avec un fichier Csv

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 10:08

Bonjour

J'aimerais remplir ma base avec un fichier Csv.
Ce fichier n'a pas d'entête de colonnes, il contient 4 colonnes et environ 15000 lignes.
De plus, sur chaque lignes, les données sont séparés par une tabulation.

Cette opération est-elle possible avec un fichier de cette taille ?
Si oui, existe-t'il une ébauche de code ?


merci a vous
Pouap !

Eléphant du PHP | 353 Messages

23 avr. 2008, 10:12

Bonjour.
Un fichier de 15K lignes devrait se traiter assez facilemenT.
Je te conseil d'aller lire cette page : http://fr3.php.net/manual/fr/function.fgetcsv.php

ca devrait t'aider

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 10:46

rectification...

C'est 150 000 lignes et non pas 15 000

voila mon code :
<?php

$fichier = "personnel.CSV";

/* On ouvre le fichier à importer en lecture seulement */ 
if (file_exists($fichier)) {
	$fic = fopen("$fichier", "rb"); 
 }else { /* le fichier n'existe pas */ 
	echo "Fichier introuvable !<br>Importation stoppée."; 
	exit(); 
}

 /* Variables */
$bdd = "bddpersdpmat"; /* Base de données */
$host= "localhost"; /* Hote (localhost en principe) */
$user= "root"; /* Utilisateur */
$pass= ""; /* Mot de passe */
$table= "personnel"; /* Table a implementer */

 /* Connexion bdd */
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); 
@mysql_select_db($bdd); 

while (!feof($fic)) { /* Tant qu'on n'atteint pas la fin du fichier */ 
   $ligne = fgets($fp,4096); /* On lit une ligne */  

   /* On récupère les champs séparés par ; dans liste*/
   $liste = explode( " ",$ligne);  

   /* On assigne les variables */ 
   $idM = $liste[0]; 
   $nom = $liste[1]; 
   $prenom = $liste[2];
   $dateNaiss = $liste[3];  

   /* Ajouter un nouvel enregistrement dans la table */ 
   $query = "INSERT INTO $table VALUES('$idM','$nom','$prenom','$dateNaiss')"; 
   $result= MYSQL_QUERY($query); 

   if(mysql_error())
	{ /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
	   print "Erreur dans la base de données : ".mysql_error();
	   print "<br>Importation stoppée.";
	   exit();
	} 
   //else /* Tout va bien */
	 //print "$nom $prenom <br>";
 } 
 
 echo "<br>Importation terminée, avec succès."; 
   
 /* Fermeture */ 
 fclose($fp); 
 MYSQL_CLOSE(); 


?>

il me marque, "le fichier ne peut être ouvert en entier" :(
Pouap !

Eléphant du PHP | 353 Messages

23 avr. 2008, 10:49

qui donc te marque "le fichier ne peut pas être ouvert en entier" ?
Selon mes souvenir excel affiche ca quand ca dépasse en gros 50k lignes. Mais cette limitation excel n'empéche en rien de faire un script dessus, même si il s'agit de 150K lignes différentes.

ton code à l'air plutôt correct (après un rapide survol), même si j'aurais utilisé fgetcsv à ta place.

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 11:13

bonjour yaug et merci.

C'est excel qui me met cette erreur. Il s'arrête a la ligne 65486.
Ce code je l'ai copier sur un autre forum. Il avait l'air de marcher.
Pouap !

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 13:48

Bien...

Le fichier 'csv' est bien trop grand donc.
Sous excel , il ne s'affiche que 64000 et quelque ligne.
Sous bloc note, il m'affiche plus du double :?

Je suppose qu'il n'existe aucune commande php permettant de lire partiellement ou par tranche un fichier externe ?
Modifié en dernier par PetarouxRay le 23 avr. 2008, 14:04, modifié 1 fois.

Eléphant du PHP | 353 Messages

23 avr. 2008, 14:01

hum.. j'avoue ne pas comprendre.
tu veux bien l'enregistrer en base non? dans ce cas tu n'as pas trop à te soucier de la taille normalement.
Quel est au juste le problème ?

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 14:07

Oui, je veux enregistrer l'ensemble des données du csv dans une table de ma base.
Le problème est que lorsque je lance mon fichier php, le message d'erreur excel "taille du fichier trop grande" apparait.

Apparemment la fonction 'fopen' ouvre le fichier (ici en lecture seul) mais rencontre une opposition de excel.
Pouap !

Eléphant du PHP | 353 Messages

23 avr. 2008, 14:11

heu...
Ca me semble bizzare tout ca.
Déjà, ferme excel en même temps, ensuite, lorsque tu appeles le fichier, si il y a une erreur, cela devrait etre une erreur php et non une erreur "excel". Je dois louper quelque chose car je ne comprend pas comment tu peux obtenir une telle erreur.

Eléphanteau du PHP | 34 Messages

23 avr. 2008, 14:56

- Excel limite donc son nombre de lignes a 65 536 pour une feuille.

- De plus, fopen (en tous cas pour moi...) ouvre le fichier dans excel et donc ca plante.


J'ai découpé mon fichier csv en trois plus petit et ca a l'air de fonctionner
Pouap !

Eléphant du PHP | 353 Messages

23 avr. 2008, 14:59

Si ca fonctionne c'est déjà ca.. reste cette histoire de fopen qui me semble plus que louche :D