[php]Lire un fichier et reprendre les données

Lire un fichier et reprendre les données [php] - PHP - Programmation

Marsh Posté le 18-05-2004 à 15:42:10    

Bonjour, voilà mon problème.
 
J'ai un fichier texte qui contient des données. Je dois donc lire le fichier et récupérer les données pour pouvoir ensuite les insérer dans une base mysql. Les données dans le fichier sont séparées par une tabulation ou un retour chariot... Alors voilà, je sais pas du tout comment m'y prendre pour séparer toutes ces données. Je sais que je dois repérer ou est la tabulation ou le retour chariot, mais je sais pas quelle fonction utiliser...
 
Merci d'avance!

Reply

Marsh Posté le 18-05-2004 à 15:42:10   

Reply

Marsh Posté le 18-05-2004 à 15:45:46    

je sais pas trop comment est organisé ton fichier, mais tu peux l'ouvrir avec la fonction file qui lit le fichier et met chacune de ses lignes dans une ligne de tableau (si je suis pas clair, la doc le sera un peu plus ;) ), ensuite, pour récupérer la tabulation, il faut rechercher la chaine \t et, pour cela, explode sera ton amie.
 
enfin, tout ça dépend quand même de la structure de ton fichier ;)

Reply

Marsh Posté le 18-05-2004 à 15:56:45    

Salut,
 
Il faudrait que tu nous en dise plus sur l'agencement de ton fichier texte (donne nous un exemple si tu le peux).
 
Il existe la fonction fopen en php qui te permets d'ouvrir un fichier texte mais les commandes sont nombreuses et il faudrait savoir a quoi ressemble l'interieur de ton fichier.
 
Sinon la meilleure solution reste encore celle proposée par dropsy cad file('fichier.txt') qui te range chaque ligne de ton fichier dans un tableau.

Reply

Marsh Posté le 18-05-2004 à 16:09:11    

Bonjour, tout d'abord merci pour vos réponses rapides. Voici un exemple de la structure de mon fichier (c'est le bordel, mais c'est pas ma faute...) pour vous faire une idée:
 

Alcool blanc 0  Canada  
Alsace 2002 Riesling France Blanc
Alsace 2001 Pinot Noir France Rouge
Alsace 2000 Riesling France Blanc
Alsace 1998 Riesling France Blanc
Alsace 2000 Gew France Blanc
Alsace 1998 Gew France Blanc
Alsace 2000 T. P. Gris France Blanc
Alsace Grains Nobles 1994 Gew France Blanc
Alsace-CrŽmant 0  France Blanc
Alsace-Grains Nobles 1997 Assemblage France Blanc
ApŽritif 0  Suisse  
Argentine 2000 Assemblage Argentine Rouge
Armagnac 0  France  
Armagnac 1972  France  
Armagnac MillŽsimŽ 1979  France  
Armagnac V.S.O.P. 0  France  
Australie 1999 Shiraz Australie Rouge
Bdx 2000 Assemblage France Rouge
Bdx 2001 Assemblage France Rouge
Bdx 2000 Assemblage France Rouge
Bdx 2001 Assemblage France Rouge
Bdx-Ch. d'Hostin 2001 Assemblage France RosŽ
Bdx-Graves 1999 Cabernet France Rouge
B


 
le truc c'est que quand je l'ouvre avec le bloc note c'est 15fois pire, les retours à la ligne ne se font pas tout le temps, mais quand j'ai fais un copier-coller sur ce post, ben ça a marché...
(il peut y avoir des champs vides)
 

Reply

Marsh Posté le 18-05-2004 à 16:17:35    

Donc j'ai quand même essayé avec la fonction file, mais ça marche pas, ça fait comme quand je l'ouvre avec le bloc note, il repère pas les retours à la ligne... C'est bizarre. Quand je l'ouvre dans word ou autre chose ça marche avec les retours à la lignes... Le truc c'est que c'est pas moi qui aie créé ce fichier alors je sais pas exactement sa structure...

Reply

Marsh Posté le 18-05-2004 à 16:44:28    

Tu peux lire le fichier ligne par ligne avec la fonction fgets. Ensuite l'utilisation de explode te permet de mettre les éléments de ta ligne en tableau (déjà dit plus haut). Il te reste ensuite à insérer le contenu du tableau dans ta base.
 
Si ton fichier est important, cela peux planter pour des raisons de temps d'exécution. cela va aussi mettre une forte charge sur ton serveur MySQL car ainsi tu fais 1 insertion par ligne.
 
Il y a une solution assez simple :
 
 
Comme c'est visiblement une extraction de BDD, demande à celui qui te l'a envoyé un fichier CSV et ensuite, tu as une superbe fonction dispo sur MySQL :
 
exemple :
 

Code :
  1. $requete_remplissage_table = "LOAD DATA LOCAL INFILE 'fichier.csv' INTO TABLE `table_dest`
  2.    FIELDS TERMINATED BY ','
  3.    ENCLOSED BY '\"'
  4.    LINES TERMINATED BY '\r\n'
  5.    (`champ1`, `champ2`, `champ3`, `champ4`, `champ5`)";
  6. mysql_query ($requete_remplissage_table, $link) or die ("erreur de chargement : " . mysql_error());
  7. echo "table remplie";
  8. mysql_close($link);


 
Le fichier CSV est en local sur le serveur.


Message édité par T509 le 18-05-2004 à 18:33:13

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 27-10-2004 à 13:46:47    

J'ai essayé cette méthode mais il me dit que ma version de mysql ne supporte pas cette commande :(
 
je dois insérer les données d'un fichier CSV dans ma table


---------------
Comparez DVD Vierges, Graveurs de DVD et Boutiques en ligne
Reply

Marsh Posté le 27-10-2004 à 14:55:31    

gaidjka a écrit :

Bonjour, tout d'abord merci pour vos réponses rapides. Voici un exemple de la structure de mon fichier (c'est le bordel, mais c'est pas ma faute...) pour vous faire une idée:
 

Alcool blanc 0  Canada  
Alsace 2002 Riesling France Blanc
Alsace 2001 Pinot Noir France Rouge
Alsace 2000 Riesling France Blanc
Alsace 1998 Riesling France Blanc
Alsace 2000 Gew France Blanc
Alsace 1998 Gew France Blanc
Alsace 2000 T. P. Gris France Blanc
Alsace Grains Nobles 1994 Gew France Blanc
Alsace-CrŽmant 0  France Blanc
Alsace-Grains Nobles 1997 Assemblage France Blanc
ApŽritif 0  Suisse  
Argentine 2000 Assemblage Argentine Rouge
Armagnac 0  France  
Armagnac 1972  France  
Armagnac MillŽsimŽ 1979  France  
Armagnac V.S.O.P. 0  France  
Australie 1999 Shiraz Australie Rouge
Bdx 2000 Assemblage France Rouge
Bdx 2001 Assemblage France Rouge
Bdx 2000 Assemblage France Rouge
Bdx 2001 Assemblage France Rouge
Bdx-Ch. d'Hostin 2001 Assemblage France RosŽ
Bdx-Graves 1999 Cabernet France Rouge
B


 
le truc c'est que quand je l'ouvre avec le bloc note c'est 15fois pire, les retours à la ligne ne se font pas tout le temps, mais quand j'ai fais un copier-coller sur ce post, ben ça a marché...
(il peut y avoir des champs vides)


 
Avec une structure de données comme ça, pas grand chose à faire étant donné que les espaces ne signifient pas toujours une nouvelle donnée dans ton cas. ça relève de l'intelligence artificielle...
 
Ooopss, en éditant ton message, je me rends compte que c'est possible, car heureusement pour toi, ce sont des tabulations qui ont été utilisées... Donc, != entre tabulation et espace, c'est bon, un simple explode fera l'affaire...

Reply

Marsh Posté le 27-10-2004 à 17:30:01    

ca donnera un truc dans le style :
 
$file = "/arborescence_jusque_topn_fichier/tonfichier.txt";
 
$fd = fopen($file, 'r');
while (!feof ($fd) ) {
 $buffer = fgets($fd, 4096);
 $array = explode("\t", $buffer);    
 /*
 La tu as mainteant $array[0] correpondant au premier mot, $array[1] ..
 */
 Et la tu fait tes inserts dans ta base, du genre :
 $sql = "INSERT INTO table (champs1, champ2) VALUES ($array[0], $array[1])";
}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed