Supprimer les dernières lignes d'un fichier.

Supprimer les dernières lignes d'un fichier. - PHP - Programmation

Marsh Posté le 16-02-2007 à 19:13:48    

Bonjour,
Je cherche à supprimer les dernières lignes d'un fichier à partir de la ligne 100.
J'arrive à mettre mon fichier dans un tableau avec file('fichier.txt'), mais après je ne vois pas d'autres solutions que de supprimer le fichier avec Unlink.
Mais cette solution ne me convient pas, car c'est pour purger les posts d'un petit tchat'.
Merci d'avance ;)

Reply

Marsh Posté le 16-02-2007 à 19:13:48   

Reply

Marsh Posté le 16-02-2007 à 22:56:00    

Je suis pas tres fort en traitement de fichiers avec php, mais la solution la plus simple pourmoi est de lire le contenu, et de reecrire ce dont tu as besoin uniquement dans unnouveau fichier et de supprimer l'ancien fichier.
Il y a surement une solution plus simple...

Reply

Marsh Posté le 17-02-2007 à 01:28:01    

Bonsoir,  
 
Voici comment il est possible de voir la chose.
 

Code :
  1. <?PHP
  2. // Voici la fonction
  3. function lokid_reduire_texte ( $fichier , $nombre_de_ligne_max)
  4. {
  5. // Le fichier converti en un tableau
  6. $mon_tableau = file($fichier);
  7. // Initialisation de la variable $txt
  8. $txt = "";
  9. // Boucle pour ne conserver que les "n" premières ligne(s)
  10. for ($i = 1; $i <= $nombre_de_ligne_max; $i++) {
  11.    $txt .=  $mon_tableau[$i];
  12.    // Pareil que $txt =  $txt.$mon_tableau[$i];
  13. }
  14. // Ouverture du fichier avec effacement du contenu  
  15. $ouvre=fopen($fichier,"w+" );
  16. // Ecriture du fichier  
  17. fwrite($ouvre,$txt);
  18. // Fermeture du fichier
  19. fclose($ouvre);
  20. }
  21. // Mise en pratique de la fonction  
  22. lokid_reduire_texte ( "mon_fichier.txt" , "5" );
  23. // Le premier argument de la fonction est le fichier à modifier
  24. // le second est le nombre de ligne à conserver
  25. ?>


Message édité par Protohd le 17-02-2007 à 01:33:47
Reply

Marsh Posté le 17-02-2007 à 09:46:43    

file_put_contents(
  $file_path,  
  array_slice(file($file_path), 0, $line_count)
);
 
(Non testé.)


Message édité par sielfried le 17-02-2007 à 09:47:15

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 19-02-2007 à 16:31:10    

Merci beaucoup,
J'ai pris la solution de Protohd. Pour le code de sielfried, c'est une bonne idée le array_slice (je ne connaissais pas), mais je crois qu'il manque qqchose pour intégrer le tableau.

Reply

Marsh Posté le 19-02-2007 à 16:41:40    

Euh non, a priori il ne manque rien.
 
file() renvoit un tableau déjà. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 20-02-2007 à 11:23:19    

Ouep, mais bizarrement ca m'écrit juste un "Array" dans le fichier texte. Il faut que je passe par une boucle pour que chaque ligne s'inscrive.

Reply

Marsh Posté le 20-02-2007 à 15:10:24    

file_put_contents peut prendre un tableau de lignes en second paramètre, peut-être pas depuis la dernière version de PHP par contre même si la doc ne dit rien à ce sujet.
 
Sinon à remplacer par :
file_put_contents(  
  $file_path,  
  array_slice(
    implode('', file($file_path)),  
    0,  
    $line_count
  )  
);


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 21-02-2007 à 21:10:33    

La méthode de Sielfried est vraiment beaucoup mieux.
 

Code :
  1. <?PHP
  2. // Voici la fonction
  3. function lokid_reduire_texte ( $fichier , $nombre_de_ligne_max)
  4. {
  5. // Le fichier converti en un tableau
  6. $mon_tableau = file($fichier);
  7. // Mauvaise méthode
  8. /*
  9. // Initialisation de la variable $txt
  10. $txt = "";
  11. // Boucle pour ne conserver que les "n" premières ligne(s)
  12. for ($i = 1; $i <= $nombre_de_ligne_max; $i++) {
  13.    $txt .=  $mon_tableau[$i];
  14.    // Pareil que $txt =  $txt.$mon_tableau[$i];
  15. }
  16. */
  17. // Bonne méthode de sielfried, qui est beaucoup beaucoup plus séduisante
  18. $mon_tableau = array_slice ($mon_tableau,0,$nombre_de_ligne_max);
  19. $txt = implode ("",$mon_tableau);
  20. // Ouverture du fichier avec effacement du contenu  
  21. $ouvre=fopen($fichier,"w+" );
  22. // Ecriture du fichier  
  23. fwrite($ouvre,$txt);
  24. // Fermeture du fichier
  25. fclose($ouvre);
  26. }
  27. // Mise en pratique de la fonction  
  28. lokid_reduire_texte ( "mon_fichier.txt" , "5" );
  29. ?>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed