Afficher un txt dans les 2 sens

sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009 - 15 nov. 2007 à 17:07
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009 - 17 nov. 2007 à 20:41
Bonjours, je debute dans le php et j'aimerais savoir comment faire pour afficher un fichier txt de bas en haut et de haut en bas. Bien sûre ce fichier est aléatoire et le nombre de ligne aussi.
Merci de votre aide.

10 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 nov. 2007 à 20:51
Salut,

Je suis pas certain d'avoir parfaitement compris la question, mais je vais répondre avec ce que j'en comprends...

Pour simplement afficher un fichier (txt, ou autre) :
echo file_get_contents($file);
où $file correspond au chemin du fichier.

Pour l'afficher en partant du bas (la dernière ligne en premier) :
// On récupère le contenu du fichier sous forme
// de tableau : 1 ligne => 1 élément du tableau
$contenu = file($file);
// On inverse l'ordre
array_reverse($contenu);
// On affiche
foreach ($contenu as $ligne) {
echo $ligne . "\n";
}

Si j'ai mal compris, alors ben... faut expliquer mieux ;)
0
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009
15 nov. 2007 à 23:07
Oui mon probkème c'est ça, mais cette solution ne marche pas.
Je pense à autre chose, serait-il possible de le faire directement dans le fichier.
Exemple:
le fichier info.txt contient
joueur1 5000pt
joueur2 9200pt
joueur3   300pt
joueur4 1000pt
joueur5 4000pt
Faire en sorte qu'il puisse ouvrire ce fichier inverser l'ordre ce qui nous donne:
joueur5 4000pt
joueur4 1000pt
joueur3   300pt
joueur2 9200pt
joueur1 5000pt
Et le re-enregistrer sous info.txt.
Merci beaucoup.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 nov. 2007 à 23:20
J'ai juste fait une petite erreur...

$contenu = array_reverse($contenu);

C'est mieux comme ça :)
0
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009
16 nov. 2007 à 16:26
Désolé, mais ça ne marche toujours pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 nov. 2007 à 16:32
Ah ben chez moi ça marche.

Au lieu de simplement dire que ça marche pas, tu pourrais décrire ce qui se passe ? Tu as un message d'erreur ? A quoi ressemble ton code ?
0
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009
16 nov. 2007 à 21:18
<?
$fichier_file = "fichier.txt";
$fichier_lenght = 40;
$max_single_msg_lenght = 100000;
$max_file_size = $fichier_lenght * $max_single_msg_lenght;
$file_size= filesize($fichier_file);
if ($file_size > $max_file_size) {
$lines = file($fichier_file);
$a = count($lines);
$u = $a - $fichier_lenght;
for($i = $a; $i >= $u ;$i--){
$msg_old =  $lines[$i] . $msg_old;
}
$deleted = unlink($fichier_file);
$fp = fopen($fichier_file, "a+");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}
$msg = str_replace ("\n"," ", $message);


$msg = stripslashes ($msg);
if ($msg != ""){
$fp = fopen($fichier_file, "a+");
$fw = fwrite($fp, "$nickname($REMOTE_ADDR)  : $msg\n");
fclose($fp);}
$lines = file($fichier_file);
$lines = array_reverse($lines);//c'est ici que j'ai mis ton code, j'ai aussi essayé au dessus
$a = count($lines);
$u = $a - $fichier_lenght;
for($i = $a; $i >= $u ;$i--){
echo $lines[$i];
}
/*
Ca ne m'inverse tout simplement pas le texte, pas d'erreur
*/
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 nov. 2007 à 23:35
Salut,

Bon ben je sais pas ce que tu fais dans ton code...
A quoi est-ce que ça correspond ?

$fichier_lenght = 40;

$u = $a - $fichier_lenght;
for($i = $a; $i >= $u ;$i--){

Que fais ce $u ici ?


Bref... :

$lines = file($fichier_file);
$lines = array_reverse($lines);

$lines contient les lignes dans l'ordre inverse.

Par contre, si tu accèdes aux lignes par leur index ($line[0] etc) forcément, ça ne changera pas, puisque array_reverse, par défaut, conserve l'association des index... Donc l'index 0 devient le dernier élément du tableau.

Mais c'est franchement inutile, puisque
file_put_contents($fichier_file, $lines);
va simplement écrire chaque ligne dans le fichier, dans l'ordre dans lequel elles sont : c'est à dire l'ordre inverse de celui de départ.
Inutile de se compliquer la vie avec des calculs pas possibles alors qu'en trois lignes c'est fait.

Par contre, tu disais au début que tu voulais afficher le résultat du fichier inversé, pas que tu voulais réécrire le fichier. Faudrait savoir.
0
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009
17 nov. 2007 à 11:39
Salut,
oui c'est juste la fonction pour afficher qui m'interresse, c'est pour ça que je suis contre donner le code car aprés on se focalise sur le reste et non pas sur le pb de la personne.
Ce n'est pas grave, car grace à toi j'ai trouvé la solution.
Comme tu m'as dis que l'index empeché de mettre dans l'odre que je voulais, j'ai juste modifié la façon de compter:
for($i = $u; $i <= $a ;$i++)
est maintenant c'est parfait!!!
Merci beaucoup, heureusement qu'il y a des personnes comme toi qui se penchent sur les pb des autres.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 nov. 2007 à 15:24
Si c'est résolu, marque le sujet comme résolu.

Et puis si tu veux que les index ne soient pas modifiés, il suffit de faire :
$lines = array_reverse($lines, false);
Comme ça, la dernière ligne, en devenant la première, a l'index 0.

Et leplus simple, pour parcourir un tableau de la première à la dernière ligne, c'est encore foreach :
foreach ($lines as $line) {
echo $line;
}
0
sbbichette Messages postés 14 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 17 juillet 2009
17 nov. 2007 à 20:41
résolu
0
Rejoignez-nous