Supprimer des lignes inferieur d un tableau

Résolu
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011 - 9 juin 2008 à 21:21
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011 - 21 juin 2008 à 07:56
Sawadee khrap :)
Ca fait des heures que je me creuse la tete pour une fonction super simple en delphi, mais j trouve pas en php :
j ai un fichier texte converti en array avec $text = file('filename.txt'); il contient ce genre d infos (sans le no des lignes) :

1    - 18/03/2006 , comment by toto
2      bla bla bla
3
4   - 19/03/2006, comment by tutu
5        bla bla bla
6
7   - 20/03/2006, comment by titi
8      file renamed
9
10   - 21/03/2006, comment by tintin
11      bla bla bla
... ...

Donc, je voudrais pouvoir enlever une partie du texte, seulement celles ou le "comment" est egal a "file renamed", et si c le cas, il faut supprimer cette ligne mais aussi la precedente. dans cet exemple ca serait effacer les ligne 6,7 et 8.
J ai donc utilise dans une boucle la fonction    if (stripos($text[$i], 'file renamed')!=0) {    mais je ne sais pas quoi mettre apres!
Je file o lit j espere que l un d entre vous m aura trouve une astuce pour demain :)
Merci, ciaoo
miMim

8 réponses

JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
11 juin 2008 à 16:58
Salut,

je te conseillerais d'utiliser les fonctions file() ou file_get_contents() (avec un explode("\n", file_get_contents($url))) afin d'avoir le contenu de ton fichier, ligne par ligne.

Ensuite, tu fais une boule (foreach par exemple) avec un test (switch ou if/else). Par exemple, if($text == 'file renamed')
tu fait un unlik sur la ligne (unlink($fichier_ligne_par_ligne[$ligne]) et un autre avec $ligne - 1)

<hr />Si ma reponse te convient, merci de l'accepter ! 
3
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
16 juin 2008 à 15:09
Salut,

Hum ... oui ya moyen ^^
Sinon, au lieu de faire $fichier[$i], tu as déjà $val pour ça ^^ (en plus, tu peux faire "as $key = > $val" )
ensuite, tu peux économiser un unset() en ajoutant la nouvelle ligne ($newFile) après le test (si c'est pas bon, on ne l'ajoute pas -> if/else.

Regarde, j'ai fais un petit truc (key(), end()) en fonction  :

function CleanArrayWithLastLine(array $ArrayFile, $words)
{
    $newFile = array();

    foreach ($ArrayFile as $val )
    {
        if( strrpos(strtolower($val), strtolower($words)) ! == false )
        {
            end($newFile);
            // Pointe sur la dernière ligne du tableau
            unset($newFile[ key($newFile) ]);
            // supprime la ligne courante
            continue;
            // Saute à la boucle suivante
        }
        $newFile[] = $val;
    }
  
    return $newFile;
}

$file = file('fichier.txt');
echo '', print_r(CleanArrayWithLastLine($file, 'File Renamed'), true), '

';

<hr />Si ma reponse te convient, merci de l'accepter ! 
3
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
9 juin 2008 à 23:11
Je te conseillerais d'utiliser cette fonction :
http://fr3.php.net/manual/fr/function.array-splice.php

aKheNAtHoN
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
10 juin 2008 à 05:53
merci pour ta reponse rapide, mais malheuresement j ai deja essaye cette fonction, et je pense que c est la seule a pouvoir faire ce que je veux, le truc c est que je ne dois pas l utiliser de la bonne facon....pourrais tu me mettre un bout de code stp??

merci
0

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

Posez votre question
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
11 juin 2008 à 19:25
oui je me suis bien pris la tete mais avec un foreach et des unset j ai reussi a avoir ce que je voulais...


Merci pour ta reponse en tout cas, a++


 
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
11 juin 2008 à 20:06
Tu peux peut-être mettre ton code ? pour ceux qui ont le même problème que toi ;)

<hr />Si ma reponse te convient, merci de l'accepter ! 
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
16 juin 2008 à 11:20
oui, j ai du l adapter un poil car j avais encore quelques bugs, mais cette fois ci c bon :

$fichier = file('filename.txt');
    $i=0;$j=0;$newFile=array();
    foreach ($fichier as $val) {
     $newFile[$j]=$fichier[$i];
     $mystring = $fichier[$i];


     $findme   = 'File Renamed';
     $pos = strrpos($mystring, $findme);
     if ($pos == true) {
      unset($newFile[$j]);
      unset($newFile[$j-1]);
      $j=$j-2;
      }


     $i++;$j++;
     }

Je pense qu il y a moyen d alleger tout ca, mais bon au moins ca fonctionne bien!
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
21 juin 2008 à 07:56
wow trop cool pour la ptite fonction, je vais l integrer au plus vite, j ai d autres petites erreurs mais rien de bien mechant.


merci en tout cas, ca devrait alleger un poil mon code :)


 
0
Rejoignez-nous