Remplir une base avec un fichier Csv

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Remplir une base avec un fichier Csv

par yaug » 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

par PetarouxRay » 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

par yaug » 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.

par PetarouxRay » 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.

par yaug » 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 ?

par PetarouxRay » 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 ?

par PetarouxRay » 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.

par yaug » 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.

par PetarouxRay » 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" :(

par yaug » 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

Remplir une base avec un fichier Csv

par PetarouxRay » 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