Afficher avant-dernière ligne fichier txt
Résolu/Fermé
A voir également:
- Afficher avant-dernière ligne fichier txt
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Supprimer dernière page word - Guide
9 réponses
Bonjour,
essaie avec ce code
<?php
$ligne="";
$monfichier = fopen('monfichier', 'r+');
while (!feof($monfichier)) {
$ligneprec=$ligne;
$ligne = fgets($monfichier);
}
fclose($monfichier);
echo $ligneprec;
?>
essaie avec ce code
<?php
$ligne="";
$monfichier = fopen('monfichier', 'r+');
while (!feof($monfichier)) {
$ligneprec=$ligne;
$ligne = fgets($monfichier);
}
fclose($monfichier);
echo $ligneprec;
?>
Bonjour Maître Yoda !
Merci !
Ca fonctionne parfaitement sur un fichier local. Par contre, comme je l'avais mentionné dans ma question, je souhaite travailler sur un fichier texte distant ex: http://www.site.com/monfichiertexte.txt . Apparemment, la fonction fopen('monfichier', 'r+'); pose problème. J'ai essayé avec @file() mais pas de résultat.
Merci !
Ca fonctionne parfaitement sur un fichier local. Par contre, comme je l'avais mentionné dans ma question, je souhaite travailler sur un fichier texte distant ex: http://www.site.com/monfichiertexte.txt . Apparemment, la fonction fopen('monfichier', 'r+'); pose problème. J'ai essayé avec @file() mais pas de résultat.
Ca ne fonctionne toujours pas, hélas ni avec "r" ni avec "r+", ma ligne apparaît blanche. Je pense que le problème pourrait être résolu avec un script qui permettrait d'envoyer, une fois par jour, le fichier dans le ftp de mon site, puisque ta première version fonctionnait avec un fichier local. Hélas, je ne suis pas assez calé pour savoir faire ça.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
23 mai 2012 à 21:31
23 mai 2012 à 21:31
Pourrais tu donner l'adresse du fichier en question, stp ?
Je voudrais voir ce que je peux faire
Je voudrais voir ce que je peux faire
Avec ce fichier test, ça marche bien chez moi. J'ai PHP 5.3.13
<?php
$ligne="";
$monfichier = fopen("http://www.swpc.noaa.gov/ftpdir/latest/DSD.txt", "r");
while (!feof($monfichier)) {
$ligneprec=$ligne;
$ligne = fgets($monfichier);
//echo $ligne;
}
fclose($monfichier);
echo $ligneprec;
?>
<?php
$ligne="";
$monfichier = fopen("http://www.swpc.noaa.gov/ftpdir/latest/DSD.txt", "r");
while (!feof($monfichier)) {
$ligneprec=$ligne;
$ligne = fgets($monfichier);
//echo $ligne;
}
fclose($monfichier);
echo $ligneprec;
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 23/05/2012 à 23:31
Modifié par heyquem le 23/05/2012 à 23:31
Merci
J'ai fait tourner ce programme en Python:
[-100:] c'est pour ne prendre que les 100 derniers caractères de la chaîne
La fonction repr() , c'est pour afficher tous les bytes explicitement, c'est à dire sans que les bytes codant pour l'affichage soient interprétés
J'ai obtenu ceci:
Le dernier byte est '\n'. C'est le byte qui fait aller à la ligne, autrement dit LF dans un affichage par Notepad++.
Donc quand on affiche le contenu du fichier, on obtient un affichage dans lequel, juste après "B3.0 0 0 0 3 0 0 0" il n'y a pas la fin du texte seulement, mais un retour à la ligne suivante. Mais quand on dit "ligne" dans la phrase précédente, c'est une ligne à l'affichage, c'est l'effet visuel à l'écran. Donc on voit un espace libre, qu'on décrit comme une ligne vide. Mais cette apparence n'est qu'un effet visuel, et toi tu ne veux pas capter un effet visuel, tu veux capter une chaîne de caractères/bytes
Si par contre on appelle ligne toute séquence de bytes dans un fichier qui se termine par '\n' ou la fin du fichier, alors la dernière ligne dans le code source du fichier est bien
"2012 05 22 121 95 780 1 -999 B3.0 0 0 0 3 0 0 0\n"
Tu crois donc que la dernière ligne est blanche, mais en fait la dernière ligne du fichier telle que je l'ai définie, est pleine de caractères et se termine par le byte '\n'
En Python, pour attraper cette ligne , je fais simplement (parce que le fichier n'est pas énorme):
content est la chaîne du code source du fichier capté à distance
content.splitlines(True) splite cette chaîne en une liste de lignes. L'argument True indique à la méthode splitlines() qu'il faut garder les LF = '\n' dans les élements (= lignes) de la liste obtenue
Et [-1] sélectionne le dernier élément càd la dernière ligne de la liste= du fichier
Tu peux peut être trouver des compréhensions supplémentaires dans ma bafouille ici:
https://forums.commentcamarche.net/forum/affich-25182883-inserer-une-ligne-dans-un-fichier-texte#18
NB: 25 minutes pour faire tout ça, codes et ce post
Vive PHP !
J'ai fait tourner ce programme en Python:
import httplib hypr = httplib.HTTPConnection(host='www.swpc.noaa.gov') hypr.request('GET','/ftpdir/latest/DSD.txt') content = hypr.getresponse().read() print repr(content[-100:])
[-100:] c'est pour ne prendre que les 100 derniers caractères de la chaîne
La fonction repr() , c'est pour afficher tous les bytes explicitement, c'est à dire sans que les bytes codant pour l'affichage soient interprétés
J'ai obtenu ceci:
'1 0 0 0 3 0 0 0\n2012 05 22 121 95 780 1 -999 B3.0 0 0 0 3 0 0 0\n'
Le dernier byte est '\n'. C'est le byte qui fait aller à la ligne, autrement dit LF dans un affichage par Notepad++.
Donc quand on affiche le contenu du fichier, on obtient un affichage dans lequel, juste après "B3.0 0 0 0 3 0 0 0" il n'y a pas la fin du texte seulement, mais un retour à la ligne suivante. Mais quand on dit "ligne" dans la phrase précédente, c'est une ligne à l'affichage, c'est l'effet visuel à l'écran. Donc on voit un espace libre, qu'on décrit comme une ligne vide. Mais cette apparence n'est qu'un effet visuel, et toi tu ne veux pas capter un effet visuel, tu veux capter une chaîne de caractères/bytes
Si par contre on appelle ligne toute séquence de bytes dans un fichier qui se termine par '\n' ou la fin du fichier, alors la dernière ligne dans le code source du fichier est bien
"2012 05 22 121 95 780 1 -999 B3.0 0 0 0 3 0 0 0\n"
Tu crois donc que la dernière ligne est blanche, mais en fait la dernière ligne du fichier telle que je l'ai définie, est pleine de caractères et se termine par le byte '\n'
En Python, pour attraper cette ligne , je fais simplement (parce que le fichier n'est pas énorme):
import httplib hypr = httplib.HTTPConnection(host='www.swpc.noaa.gov') hypr.request('GET','/ftpdir/latest/DSD.txt') content = hypr.getresponse().read() print content.splitlines(True)[-1]
content est la chaîne du code source du fichier capté à distance
content.splitlines(True) splite cette chaîne en une liste de lignes. L'argument True indique à la méthode splitlines() qu'il faut garder les LF = '\n' dans les élements (= lignes) de la liste obtenue
Et [-1] sélectionne le dernier élément càd la dernière ligne de la liste= du fichier
Tu peux peut être trouver des compréhensions supplémentaires dans ma bafouille ici:
https://forums.commentcamarche.net/forum/affich-25182883-inserer-une-ligne-dans-un-fichier-texte#18
NB: 25 minutes pour faire tout ça, codes et ce post
Vive PHP !
Merci Heyquem,
Mais en php, ça donne quoi finalement ? Parce que moi et le Python, ça fait 3 !
Mais en php, ça donne quoi finalement ? Parce que moi et le Python, ça fait 3 !
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 mai 2012 à 00:13
24 mai 2012 à 00:13
J'ai envie de te répondre que ce n'est pas mon problème si tu utilises un mauvais langage, si tu ne sais pas dépasser tout seul ses insuffisances et si la communauté de PHP est formée de développeurs médiocres, en tous cas ici, au point que 24 heures après ta question, tu n'aies toujours pas de solution en PHP
Bien que je ne souhaite pas spécialement être désagréable.
Mais parfois il faut que les choses soient dites clairement pour qu'elles soient comprises.
Libre à toi de continuer avec PHP, je souligne seulement qu'avec Python, je résouds ton problème en moins de 10 minutes. Et j'ai apporté quelques explications, te sont elles utiles ?
Bien que je ne souhaite pas spécialement être désagréable.
Mais parfois il faut que les choses soient dites clairement pour qu'elles soient comprises.
Libre à toi de continuer avec PHP, je souligne seulement qu'avec Python, je résouds ton problème en moins de 10 minutes. Et j'ai apporté quelques explications, te sont elles utiles ?
Ben c'est pas sympa pour les développeurs en PHP. La bonne réponse a bien été donnée par Yoda, par exemple et celle-ci semble fonctionner chez lui. La question qui demeure est : pourquoi ça ne fonctionne pas chez moi.
Pour revenir à la question, tout mon site est développé depuis 7 ans en PHP avec mes piètres connaissances. Je ne me vois pas apprendre un nouveau langage juste pour faire apparaître une info sur celui-ci.
Tes explications m'ont éclairé sur la manière dont le fichier txt était conçu, mais ça ne résout pas mon problème.
Merci pour ton aide
Pour revenir à la question, tout mon site est développé depuis 7 ans en PHP avec mes piètres connaissances. Je ne me vois pas apprendre un nouveau langage juste pour faire apparaître une info sur celui-ci.
Tes explications m'ont éclairé sur la manière dont le fichier txt était conçu, mais ça ne résout pas mon problème.
Merci pour ton aide
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
24 mai 2012 à 09:21
24 mai 2012 à 09:21
<?php $chemin_fichier='repertoire/fichier.txt'; //ici le chemin relatif vers ton fichier par rapport à ce script php if(is_file($chemin_fichier)){ //on verifie que le fichier peut bien etre atteint avec le chemin defini ci dessus //lecture contenu $array_fichier=file($chemin_fichier); //met le contenu dans un array ligne par ligne $nombre de lignes=sizeof($array_fichier); if($nombre de lignes>0){ //affichage avant derniere ligne //l'array est numeroté à partir de ZERO donc $n_adl=$nombre de lignes-2; echo 'Avant derniere ligne: '.$array_fichier[$n_adl]; }else{ echo 'Fichier vide !'; } }else{ echo 'fichier inaccessible ou inexistant, verifier le chemin !'; } ?>
au passage merci heyquem on voit qu'il existe encore des gens qui se croient supérieurs !!!