Afficher un txt dans les 2 sens

Signaler
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009
-
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009
-
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

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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 ;)
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009

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.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
J'ai juste fait une petite erreur...

$contenu = array_reverse($contenu);

C'est mieux comme ça :)
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009

Désolé, mais ça ne marche toujours pas.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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 ?
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009

<?
$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
*/
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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.
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009

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.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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;
}
Messages postés
14
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
17 juillet 2009

résolu