Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
715 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°730409
gaidjka
Posté le 18-05-2004 à 15:42:10  profilanswer
 

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!

mood
Publicité
Posté le 18-05-2004 à 15:42:10  profilanswer
 

n°730414
dropsy
et bonne chance surtout...
Posté le 18-05-2004 à 15:45:46  profilanswer
 

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 ;)

n°730425
benjhe
super mouton
Posté le 18-05-2004 à 15:56:45  profilanswer
 

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.

n°730451
gaidjka
Posté le 18-05-2004 à 16:09:11  profilanswer
 

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)
 

n°730466
gaidjka
Posté le 18-05-2004 à 16:17:35  profilanswer
 

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...

n°730503
T509
$job->GetJob(now)
Posté le 18-05-2004 à 16:44:28  profilanswer
 

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 !
n°883863
compuman10​1
Posté le 27-10-2004 à 13:46:47  profilanswer
 

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
n°883937
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2004 à 14:55:31  profilanswer
 

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...

n°884167
bunker83+1
Posté le 27-10-2004 à 17:30:01  profilanswer
 

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])";
}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[VB6] probleme pour lire un fichier avec Openjavascript: changement de la source d'un fichier flash
scripts de copie fichier sur pc distantTrouver l'etat d'un fichier
[Php] Cryptage de donnéescomparer des données
UNIX: comment importer dans 1 fichier le temps d'exec d'un code?Lire les attributs d'archivage d'un fichier
Plus de sujets relatifs à : [php]Lire un fichier et reprendre les données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR