Page 1 sur 1
Remplir une base avec un fichier Csv
Posté : 23 avr. 2008, 10:08
par PetarouxRay
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
Posté : 23 avr. 2008, 10:12
par yaug
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
Posté : 23 avr. 2008, 10:46
par PetarouxRay
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"

Posté : 23 avr. 2008, 10:49
par yaug
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.
Posté : 23 avr. 2008, 11:13
par PetarouxRay
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.
Posté : 23 avr. 2008, 13:48
par PetarouxRay
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 ?
Posté : 23 avr. 2008, 14:01
par yaug
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 ?
Posté : 23 avr. 2008, 14:07
par PetarouxRay
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.
Posté : 23 avr. 2008, 14:11
par yaug
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.
Posté : 23 avr. 2008, 14:56
par PetarouxRay
- 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
Posté : 23 avr. 2008, 14:59
par yaug
Si ca fonctionne c'est déjà ca.. reste cette histoire de fopen qui me semble plus que louche
