Discussion:
Lire un fichier texte
(trop ancien pour répondre)
Pascale
2009-07-14 20:07:35 UTC
Permalink
Je ne pensais pas que c'était compliqué... et bien pour moi, si.

Je voudrais juste garder une trace des courriels envoyés (cf ma question
précédente), mais je n'ai pas envie d'encombrer ma boîte aux lettres, donc
j'ai fait un petit fichier texte comme ça :

$fichier=fopen("fichier.txt","a+");
// Ceci à chaque envoi de courriel
$tlog="Courriel envoyé à ".$courriel." (".$pseudo.") avec la
liste\n".$liste1.";\n";
fwrite($fichier,$tlog);
// Fin des envois
fclose($fichier);

Le séparateur entre chaque entrée est un ;
Le fichier se crée normalement, si je le lis avec n'importe quel éditeur de
texte, le contenu est correct et complet.

Par exemple :

Courriel envoyé à ***@yahoo.fr (untel) avec la liste
http://wwww.... (arbuste, fleurs blanches) entrée le 06/05/2009
;
Courriel envoyé à ***@laposte.net (unautre) avec la liste
http://wwww.... (semis spontané d'arbre ou d'arbuste) entrée le 13/01/2009
;
Courriel envoyé à ***@wanadoo.fr (machin) avec la liste
http://wwww.... (identification chaton d'arbre) entrée le 13/04/2009
http://wwww.... (identification fleur) entrée le 09/06/2009
;

etc

Seulement voilà, j'aimerais aussi pouvoir le relire, et c'est là que ça se
gâte :

$fichier=fopen("fichier.txt","r");
$lecture=fgets($fichier);
$donnees=explode(";",$lecture);
$combien=count($donnees)-1;
for ($i=0;$i<=$combien;$i++)
{echo $donnees[$i],"<br>";}
fclose($fichier);

C'est un code qui marche parfaitement sur d'autres fichiers texte sur un
autre de nos sites et là, rien à faire, seule une partie de la 1ère ligne
est affichée !

Courriel envoyé à ***@yahoo.fr (untel) avec la liste

Et c'est tout !

J'ai cherché sur le ouaibe, essayé d'appliquer d'autres méthodes : rien à
faire, je n'y arrive pas.
Donc si une bonne âme peut m'aider à lire le contenu de ce foutu fichier
texte, je lui en serais reconnaissante...
--
Pascale
Olivier Miakinen
2009-07-14 20:31:36 UTC
Permalink
Post by Pascale
Je ne pensais pas que c'était compliqué... et bien pour moi, si.
Je voudrais juste garder une trace des courriels envoyés (cf ma question
précédente), mais je n'ai pas envie d'encombrer ma boîte aux lettres, donc
$fichier=fopen("fichier.txt","a+");
// Ceci à chaque envoi de courriel
$tlog="Courriel envoyé à ".$courriel." (".$pseudo.") avec la
liste\n".$liste1.";\n";
fwrite($fichier,$tlog);
// Fin des envois
fclose($fichier);
Ok. Chaque enregistrement s'étend sur plusieurs lignes (il y a au moins
deux "\n" sans compter ceux qui peuvent être cachés dans les variables)
et le séparateur d'enregistrement est un ";".
Post by Pascale
$fichier=fopen("fichier.txt","r");
Tu ouvres le fichier
Post by Pascale
$lecture=fgets($fichier);
Tu lis la première ligne (qui n'est qu'une partie du premier
enregistrement).
Post by Pascale
$donnees=explode(";",$lecture);
Inutile : il n'y a pas de ";" sur cette ligne.
Post by Pascale
$combien=count($donnees)-1;
$combien = 0
Post by Pascale
for ($i=0;$i<=$combien;$i++)
{echo $donnees[$i],"<br>";}
echo $donnees[0]
Post by Pascale
fclose($fichier);
Et c'est fini. Pas étonnant que tu ne sois pas satisfaite !


Essaye ceci (j'ai juste remplacé trois lignes par une seule) :

$lecture=file_get_contents("fichier.txt");
$donnees=explode(";",$lecture);
$combien=count($donnees)-1;
for ($i=0;$i<=$combien;$i++)
{echo $donnees[$i],"<br>";}
--
Olivier Miakinen
Pascale
2009-07-14 21:13:57 UTC
Permalink
Post by Olivier Miakinen
Ok. Chaque enregistrement s'étend sur plusieurs lignes (il y a au moins
deux "\n" sans compter ceux qui peuvent être cachés dans les variables)
Il pourrait y en avoir, mais il n'y en a pas (j'ai fait simple, histoire de
ne pas rajouter d'ennuis).
Post by Olivier Miakinen
et le séparateur d'enregistrement est un ";".
Exact.
Post by Olivier Miakinen
[couic]
Et c'est fini. Pas étonnant que tu ne sois pas satisfaite !
Merci pour la dissection, je comprends mieux pourquoi ça merdoie.
Post by Olivier Miakinen
$lecture=file_get_contents("fichier.txt");
$donnees=explode(";",$lecture);
$combien=count($donnees)-1;
for ($i=0;$i<=$combien;$i++)
{echo $donnees[$i],"<br>";}
Et - évidemment - ÇA, ça marche ! (-:

Je vais être obligée de te citer comme co-auteur du site, à ce rythme là !
(o:
--
Pascale
Xavier Nayrac
2009-07-15 08:05:06 UTC
Permalink
Post by Pascale
Je ne pensais pas que c'était compliqué... et bien pour moi, si.
Je voudrais juste garder une trace des courriels envoyés (cf ma question
précédente), mais je n'ai pas envie d'encombrer ma boîte aux lettres, donc
$fichier=fopen("fichier.txt","a+");
// Ceci à chaque envoi de courriel
$tlog="Courriel envoyé à ".$courriel." (".$pseudo.") avec la
liste\n".$liste1.";\n";
fwrite($fichier,$tlog);
// Fin des envois
fclose($fichier);
...
Post by Pascale
Seulement voilà, j'aimerais aussi pouvoir le relire, et c'est là que ça se
$fichier=fopen("fichier.txt","r");
$lecture=fgets($fichier);
$donnees=explode(";",$lecture);
$combien=count($donnees)-1;
for ($i=0;$i<=$combien;$i++)
{echo $donnees[$i],"<br>";}
fclose($fichier);
C'est un code qui marche parfaitement sur d'autres fichiers texte sur un
autre de nos sites et là, rien à faire, seule une partie de la 1ère ligne
est affichée !
Non, toute la première ligne est affichée, la seule et unique ligne que
lit ton programme. Tu confonds une ligne de texte, au sens de php, avec
un enregistrement, au sens de ton appli.
Post by Pascale
Et c'est tout !
J'ai cherché sur le ouaibe, essayé d'appliquer d'autres méthodes : rien à
faire, je n'y arrive pas.
Tu n'as peut-être pas chercher au bon endroit :
http://fr.php.net/manual/fr/function.fgets.php
--
Xavier Nayrac
http://personalbugtracker.free.fr
Pascale
2009-07-15 15:34:52 UTC
Permalink
Post by Xavier Nayrac
Non, toute la première ligne est affichée, la seule et unique ligne
que lit ton programme. Tu confonds une ligne de texte, au sens de php,
avec un enregistrement, au sens de ton appli.
Oui, je pense que c'est (c'était ?) bien mon problème.
Post by Xavier Nayrac
http://fr.php.net/manual/fr/function.fgets.php
Oh si, j'étais allée voir, mais il est évident que je n'avais pas compris
ce que je lisais. J'ai dû croire que le pointeur se déplaçait gentiment du
début à la fin du fichier...
--
Pascale
http://www.la-grille-verte.net
Globule
2009-09-14 12:56:00 UTC
Permalink
Désolé de vous déranger mais je passais par là alors une petite idée
m'est venu : "file_get_contents"

http://www.php.net/manual/fr/function.file-get-contents.php

Continuer la lecture sur narkive:
Loading...