fichier texte ouvert avec fgetcsv() en php (résolu)

fichier texte ouvert avec fgetcsv() en php (résolu) - PHP - Programmation

Marsh Posté le 09-01-2009 à 11:50:50    

Bonjour à tous,
 
Voilà j'ai un fichier texte avec pas mal de ligne de ce type là:
"le test est là" "parti pour réussir" "fiofififi" 07/01/2009 "12,00" "/20" 2008 "FEGS"
comme on peut le voir les chaines de caractères sont entre "" alors que date et entier non. Les espaces sont pas les mêmes donc dur de trouver un moyen de traiter correctement le fichier...
j'aimerai faire en sorte que chaque bout aille dans une variable mais j'avoue que je galère un peu donc si quelqu'un sait comment trier cette ligne ça m'aiderai. Je vais continuer mes tests et si je trouve avant une réponse je mettrai en ligne car je dois pas être le seul au vue de ce que j'ai pu lire sur le net qui recherche un truc dans le style.
 
Merci d'avance en tout cas.


Message édité par rouanelion le 13-01-2009 à 08:43:28
Reply

Marsh Posté le 09-01-2009 à 11:50:50   

Reply

Marsh Posté le 09-01-2009 à 11:54:15    

Même si le format de ligne est bizarre, si toutes les lignes sont comme ça, ça ne pose pas trop de problèmes. Est-ce qu'elles sont toutes indentiques ?

Reply

Marsh Posté le 09-01-2009 à 11:56:00    

La structure est-elle toujours la même ?
 [:grilled]


Message édité par Mara's dad le 09-01-2009 à 11:56:18

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-01-2009 à 11:59:23    

Merci de vos réponses aussi rapide je m'y attendais pas.
J'ai parcouru pas mal de lignes et oui la structure est la même j'ai des champs vident "" mais je pense pas que ça posera un problème. Et vous?

Reply

Marsh Posté le 09-01-2009 à 12:01:42    

Non, pas de pb pour une expression régulière.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-01-2009 à 12:41:48    

Ca m'a tout l'air d'être un texte dans un format CSV avec séparateur espace (ou tabulation, à vérifier)
=> fgetcsv

Reply

Marsh Posté le 09-01-2009 à 13:41:54    

Pas mal le coup de fgetcsv, je connaissais pas !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-01-2009 à 13:45:54    

je vais regarder ça de plus pret merci en tout cas

Reply

Marsh Posté le 09-01-2009 à 14:25:21    

Merci voilà ce que j'ai fait et repris sur le net grâce a ta fonction et ça sert dans mon cas. J'ai déjà isolé toutes les parties dans chaque ligne du fichier j'ai plus que me faire la suite.
Si ça peut servir, j'ai mis des commentaires vite fait

Code :
  1. $row = 1; //je mets la variable définissant le nombre d'enregistrement à 1
  2. $handle = fopen("nomfichier.extension", "r" ); //ouverture du fichier en lecture attribué a variable $handle
  3. while (($data = fgetcsv($handle, 1000, "\t" )) !== FALSE) // Boucle tant que j'ai pas parcouru tout mon fichier avec comme délimiteur tabulation avec \t
  4. {
  5.       $num = count($data); //compte nombre de parti dans la phrase
  6.      echo "<p> $num champs à la ligne $row: <br /></p>\n"; //affiche nombre de parti dans la phrase
  7. $row++; //incrémentation de l'enregistrement de la phrase
  8.     for ($c=0; $c < $num; $c++) //tant qu'on a pas afficher toutes les parties
  9. {
  10.         echo $data[$c] . " <br />\n"; // affichage des différentes parties composants une ligne $rows
  11.     }
  12. }
  13. fclose($handle); // on ferme le fichier

Reply

Marsh Posté le 09-01-2009 à 15:01:20    

Je sais que tu débutes, mais là t'es entrain de noyer ton code dans trop de commentaire. Trop de commentaires rend l'ensemble plus difficile à relire par ce qu'on est obligé de réfléchir un peu plus pour ne pas être perturbé par le texte.
 
par exemple :
"//je mets la variable définissant le nombre d'enregistrement à 1 "
Le = du code se suffit à lui même pour savoir quelle valeur tu mets dans la variable. Un simple "//compteur de numéro de ligne" suffit pour savoir à quoi sert la variable tout en étant d'ailleurs plus clair sur l'utilité de cette variable.
 
En passant. Si tu veux simplifier légèrement ton code, en php il y a une fonction magique pour parcourir un tableau en entier : foreach Comme son nom l'indique c'est une boucle qui fait une itération (une exécution du code contenu entre {} ) pour chaque élément du tableau. Cependant c'est un raccourcis du langage (la plupart des autres langages n'ont pas d'équivalent) et c'est très bien que t'ai d'abord appris à te servir de la boucle "for".
 
Attention avec foreach, c'est une instruction plus lente que le for normal par ce qu'elle fournis par défaut une copie des éléments du tableau et pas directement les éléments du tableau. Du coup même si on modifie les éléments fournis par foreach, le contenu du tableau reste intact. On peut évidement lui dire de fournir les éléments du tableau lui même pour modifier le contenu du tableau mais ça n'est pas la peine de t'embrouiller avec ça pour le moment. ;)

Reply

Marsh Posté le 09-01-2009 à 15:01:20   

Reply

Marsh Posté le 09-01-2009 à 15:08:52    

Ok merci de l'information, je vais nettoyer tout ça et j'espère que ça marchera ^_^ car chaque champs de données que je récupère je veux le mettre dans une table sql donc j'ai encore de quoi m'amuser un peu.

Reply

Marsh Posté le 12-01-2009 à 17:02:44    

rebonjour,
J'ai encore des problèmes avec mes fichiers txt...
 
fgetcsv() fonctionne mais pas sur tous les fichiers...
Après analyse du problème, il s'avère que certains ont besoin lorsque je les ouvre dans excel que je mette comme délimiteur de texte " en plus de la tabulation et je n'arrive pas à le gérer dans fgetcsv(), pourtant y a bien un 4eme argument dans cette fonction qui est "enclosure" mais le " me plante mon code si quelqu'un voit comment je peux faire...
Merci d'avance

Reply

Marsh Posté le 12-01-2009 à 17:07:52    

Exemple de code qui plante?

Reply

Marsh Posté le 13-01-2009 à 08:42:02    

Merci Omega2 ça y est j'ai compris ce qui clochait, j'avais les lignes de mon fichier texte qui était légèrement supérieur au deuxième paramètre de la fonction... une journée a nettoyer le fichier avec des fonctions php pour comprendre cela... y a des jours faut pas se lever :-)
Merci encore je vous embêterai plus avec ça.

Reply

Sujets relatifs:

Leave a Replay

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