Fin de tableau
Le
Le Fou
Salut,
[Débutant en PHP]
J'ai un fichier texte qui s'appelle "liste_messages.txt" et qui contient :
message_1.txt
message_2.txt
sans espace après chaque ligne et sans retour chariot après la dernière
ligne.
J'ai aussi 2 fichiers texte dont les noms sont ceux contenus dans le fichier
précédent.
Le but du jeu :
- Lire le fichier "liste_messages.txt", mettre ses lignes dans un tableau,
trier le tableau en ordre inverse et récupérer ensuite la valeur de chaque
ligne du tableau (donc le nom du message) pour aller lire et afficher ce
message.
Voici mon code :
<?php
$listMsg = file("news/liste_messages.txt");
arsort ($listMsg);
while ( list( $numeroLigne, $nomMsg ) = each( $listMsg ) ) {
echo "<B>Ligne $numeroLigne:</B> $nomMsg" . "toto<br>";
$fichier = fopen("news/$nomMsg", "r");
$titreMsg = fgets($fichier, 4096);
$dateMsg = fgets($fichier, 4096);
/ / à ce niveau je ne suis pas à la fin du fichier mais je ne veux pas
afficher la suite
echo "<h2>$titreMsg</h2>";
echo "<p class=\"date\">$dateMsg</p>";
fclose ($fichier);
}
?>
Le programme m'affiche bien :
Ligne 1: message_2.txttoto
- Le titre
- La date
Ligne 0: message_1.txt toto
et ensuite :
Warning: fopen(news/message_1.txt ) [function.fopen]: failed to open stream:
Parceque si vous remarquez bien, il y a un caractère à la fin du texte
"message_1.txt", on le voit bien quand j'écris "toto" derrière, qui est
censé être collé.
Quel est ce caractère ?
- Un espace (qui vient d'où) ?
- Une marque de fin de tableau ?
- Une marque de fin de fichier ?
Comment l'enlever pour retrouver le nom exact du fichier à ouvrir ?
Merci.
--
A'tchao
Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/
[Débutant en PHP]
J'ai un fichier texte qui s'appelle "liste_messages.txt" et qui contient :
message_1.txt
message_2.txt
sans espace après chaque ligne et sans retour chariot après la dernière
ligne.
J'ai aussi 2 fichiers texte dont les noms sont ceux contenus dans le fichier
précédent.
Le but du jeu :
- Lire le fichier "liste_messages.txt", mettre ses lignes dans un tableau,
trier le tableau en ordre inverse et récupérer ensuite la valeur de chaque
ligne du tableau (donc le nom du message) pour aller lire et afficher ce
message.
Voici mon code :
<?php
$listMsg = file("news/liste_messages.txt");
arsort ($listMsg);
while ( list( $numeroLigne, $nomMsg ) = each( $listMsg ) ) {
echo "<B>Ligne $numeroLigne:</B> $nomMsg" . "toto<br>";
$fichier = fopen("news/$nomMsg", "r");
$titreMsg = fgets($fichier, 4096);
$dateMsg = fgets($fichier, 4096);
/ / à ce niveau je ne suis pas à la fin du fichier mais je ne veux pas
afficher la suite
echo "<h2>$titreMsg</h2>";
echo "<p class=\"date\">$dateMsg</p>";
fclose ($fichier);
}
?>
Le programme m'affiche bien :
Ligne 1: message_2.txttoto
- Le titre
- La date
Ligne 0: message_1.txt toto
et ensuite :
Warning: fopen(news/message_1.txt ) [function.fopen]: failed to open stream:
Parceque si vous remarquez bien, il y a un caractère à la fin du texte
"message_1.txt", on le voit bien quand j'écris "toto" derrière, qui est
censé être collé.
Quel est ce caractère ?
- Un espace (qui vient d'où) ?
- Une marque de fin de tableau ?
- Une marque de fin de fichier ?
Comment l'enlever pour retrouver le nom exact du fichier à ouvrir ?
Merci.
--
A'tchao
Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/

Poser une question


C'est le caractère newline (n), ainsi qu'on peut le comprendre si on
lit la doc en anglais, mais qui est incompréhensible dans la version
française.
http://fr2.php.net/manual/en/function.fgets.php
http://fr2.php.net/manual/fr/function.fgets.php
Par exemple :
$fichier = fopen("news/$nomMsg", "r");
$titreMsg = rtrim(fgets($fichier));
$dateMsg = rtrim(fgets($fichier));
fclose ($fichier);
Tu peux faire aussi, en une seule ligne :
list($titreMsg, $dateMsg) explode("n", file_get_contents("news/$nomMsg"));
http://fr2.php.net/trim
ça devrait aider, même si ça n'explique pas le pourquoi du comment. :)
--
**davel**
http://www.davel.fr/blog/
C'est effectivement le caractère n, code ascii 0A (vu en utilisant bin2hex)
Le problème c'est que ce n'est pas là qu'il me gène mais ici :
$listMsg = file("news/liste_messages.txt");
arsort ($listMsg);
while ( list( $numeroLigne, $nomMsg ) = each( $listMsg ) ) {...
C'est $nomMsg qui comporte ce caractère mais uniquement en lisant la
dernière ligne, alors que le fichier "liste_messages.txt" contient plusieurs
lignes (donc avec un n).
Mais peu importe, comme toi et davel_x me l'avez suggéré, "trim" est
parfaitement adapté pour régler ce problème.
Je n'y avais pas pensé car dans la doc que j'avais, qui datait de 2001, il
était marqué :
"trim -- Supprime les espaces "en début et fin de chaîne"
et on n'y parlait pas "d'autres caractères"... C'est ballot, hein ? ;-)
Merci à vous.
--
A'tchao
Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/
Pile-poil ! Merci.
--
A'tchao
Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/