Supprimer la ligne X d'un fichier txt

Supprimer la ligne X d'un fichier txt - PHP - Programmation

Marsh Posté le 05-03-2013 à 00:17:01    

bonjour à tous ,
 
j'ai sous la main un fichier txt avec plusieurs lignes :
 

Citation :

voiture
camion
velo
avion
train
autre
.........


 
avec un code php je peux faire une recherche , je lui demande la ligne "4" , le script me retourne la ligne 4 et le texte "avion"
 
je voudrais supprimer la ligne 4 mais impossible de trouver ce foutu bout de code  
je voudrais aussi ne pas avoir de trou apres la suppréssion de la ligne 4 :
 
 
pas ça :

Citation :

voiture
camion
velo
 
train
autre
.........


 
mais ça :
 

Citation :

voiture
camion
velo
train
autre
.........


 
et a la prochaine demande de la valeur 4 il me retourne cette fois "velo"
 
voici le dote qui me permet via un FORM et une valeur numerique d'aller chercher la ligne et afficher son contenu :
 
<?
$ouvre=fopen("images.up","r" );
$i = 0;
while ($i < ($img_compt2))
{
$temp = fgets($ouvre);
$i++;
}
echo '<br>Lien : '.$temp.'<br>Ligne :'.$img_compt2 ;
 
// ------------ >> $img_compt2 : c'est la valeur de la ligne a chercher , valeur entré via un formulaire
// ------------ >> $temp : c'est la valeur de la ligne  
 
 
fclose($ouvre) ;
?>
 
la valeur $img_compt est ma ligne a supprimer  
une idée ? car la je sais plus quoi chercher :( :(
 
 
cdt


Message édité par pascal- le 05-03-2013 à 00:26:26
Reply

Marsh Posté le 05-03-2013 à 00:17:01   

Reply

Marsh Posté le 05-03-2013 à 21:45:49    

Bonsoir,
 
Je prends l'hypothèse que chaque ligne ne contient qu'un seul mots.  
Que tu respecte l'orthographe, que ta recherche ne contient aucune faute.
 
Ton soucis se réglera :
 
1- Par une méthode te permettant de comparer ce que tu saisie dans ton formulaire, au retour que tu auras en lisant ton fichier, avec la méthode (Ctrcmp) http://php.net/manual/fr/function.strcmp.php Si cette méthode ne te convient pas d'autres existent.
 
2- Créer un second fichier texte qui comprendra uniquement les lignes que tu gardes. Pas le choix.  
 
 
Un petite recherche ?  :whistle:  
 
- http://www.commentcamarche.net/for [...] xte-en-php
- http://forum.hardware.fr/hfr/Progr [...] 3673_1.htm
 
 
 
 

Reply

Marsh Posté le 06-03-2013 à 10:02:15    

$ArrayFile = file_get_contents() qui te met le fichier dans un tableau (1 ligne du fichier par entrée dans le tableau)
 
unset($ArrayFile[$numLigneASupprimer]);
$Fichier = implode("\n", $ArrayFile);
 
Tu sauvegardes $Fichier dans un fichier.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-03-2013 à 18:47:50    

bonjour  
 
merci pour l'aide  
mais je dois me louper quelque part  
 
je me retrouve avec cette erreur :
Fatal error: Cannot unset string offsets in /xxxxx/xxxxxx/www/xxx/xxxxxx/c.php on line 215
 
 
voici le code  
 
           $ouvre=fopen("fichier.txt","r" );
           $i = 0;
           while ($i < ($img_compt2))
           {
           // on recupère la ligne courante
           $temp = fgets($ouvre);
           $i++;
           }
/// simple echo de controle des données
           echo '<br>Lien : '.$temp.'<br>Ligne :'.$img_compt2 ;
/// $temp : ligne complete dans le fichier c'est une url donc pas de coupure rien  
/// $img_compt2 : le numero de la ligne dans le fichier
 
/// j'ai ajouté ça :
           $ArrayFile  = file_get_contents('fichier.txt');
           echo $file ;
 
// l'écho $file marche bien j'ai le listing en une ligne du fichier txt  
// la je bloque au unset que je mette [$temp] ou [$img_compt2]
           unset($ArrayFile[$temp]);  
           
 
// j'ai toujours la meme erreur  
 
 
j'ai mis mes infos dans le code en /// :)  
 
je suis un peu perdu la :)  
 
j'ai pourtant le fichier.txt chargé , le numero de la ligne est ca valeur une url , mais ce unset refuse grrrrrrrrrr
 
Cdt
 
 
EDIT :
 
peut etre ne devrais je pas plus simple remplacer ma ligne X par "\n\r"  
normalement ca doit le supprimer direct ?
 
 
EDIT 2 : j'ai mis le fopen en W et non r , la ca efface tous le fichier :)


Message édité par pascal- le 06-03-2013 à 19:09:24
Reply

Marsh Posté le 06-03-2013 à 19:27:19    

Ta variable $ArrayFile n'est pas un array, mais une chaine.
 
Utilise file()
 

Code :
  1. $ligneAVirer = 'trucbidule';
  2. $arrayFile = file('fichier.txt');
  3. foreach( $arrayFile as $line => $key )
  4. {
  5.     if( trim($line) == $ligneAVirer )
  6.         unset($arrayFile[$key]);
  7. }
  8. file_put_contents(implode("\n", $arrayFile));


 

Reply

Marsh Posté le 06-03-2013 à 19:46:57    

je me retrouve avec cette erreur :
 
Warning: file_put_contents() expects at least 2 parameters, 1 given in
 
en ligne file_put_contents(implode("\n", $arrayFile));
 
$ligneAVirer je dois bien mettre la valeur de la ligne et non son numero ?
 
par contre $key c'est quoi ?

Reply

Marsh Posté le 06-03-2013 à 20:16:28    

Ah oui mince, j'ai omis le 1er paramètre, c'est à dire le nom du fichier, n'hésite pas à consulter la doc.

 
Citation :

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )

 

Oui, tu peux mettre la valeur de la ligne, mais si t'as déjà le n° de la ligne devant être supprimée dans le fichier, autant s'en servir, cela évitera les comparaisons dans la boucle.

 

$key, ce sont les index de l'array.


Message édité par bistouille le 06-03-2013 à 20:18:42
Reply

Marsh Posté le 06-03-2013 à 20:50:03    

la valeur de la ligne a supprimer dans le fichier Fichier.txt est la valeur $img_compt2
 
donc si j'ai loupé lol  
ca doit ressembler à ca :
 
file_put_contents($arrayFile, "\n" [, $img_compt2]);
 
edit :
bon la ligne au dessus marche pas  
 
j'ai donc testé ça :
 
 file_put_contents('fichier.txt' , "\n" , $mon_numero_de_ligne_à_supprimer);  
 
ca vide le fichier.txt completement :(


Message édité par pascal- le 06-03-2013 à 21:07:56
Reply

Marsh Posté le 06-03-2013 à 22:01:29    

Tu comprends ce que tu fais ?
 
Là tu écrases ton fichier par la valeur d'une variable contenant un n° de ligne  :whistle:  
 
Sachant que la valeur à supprimer est contenu dans ta variable $img_compt2 , t'avais juste à la remplacer dans le morceau de code que je t'ai montré.
 

Code :
  1. $fileName = 'fichier.txt';
  2. $arrayFile = file($fileName);
  3. foreach( $arrayFile as $line => $key )
  4. {
  5.     if( trim($line) == $img_compt2 )
  6.         unset($arrayFile[$key]);
  7. }
  8. file_put_contents($fileName, implode("\n", $arrayFile));

Reply

Marsh Posté le 07-03-2013 à 04:24:09    

en fait pas trop premiere fois que j'utilise ca  
 
la valeur à supprimé est dans $temp , la valeur $img_compt2 est egale a la ligne de $temps dans le fichier.txt
 
je decouvre et j'essai de mieux comprendre , je testerais ca cette apres midi .
 
merci pour ton aide bistouille :)

Reply

Marsh Posté le 07-03-2013 à 04:24:09   

Reply

Marsh Posté le 07-03-2013 à 14:37:36    

bon ca ne marche pas , et ca me bug le reste du code :( pas de chance moi .
ca touche meme pas a mon fichier txt , mais ca me flood le reste de mon code .
un code me donne le nbr de ligne dans le fichier txt .
mais avec ce code en plus il affiche n'importe quoi ......................
 
suis je vraiment obligé de refaire une boucle avec $filename  et recharger une nouvelle fois mon fichier txt ??
 
n'y a t'il pas une autre facon de supprimer cette ligne  
en utilisant le fopen que j'ai deja utilisé au dessus pour trouver ma ligne et ce quelle contient ?
 
 
 
edit :
 
j'ai testé ton code seul dans un fichier php , il se passe rien et ca me bug le fichier txt


Message édité par pascal- le 07-03-2013 à 16:05:05
Reply

Marsh Posté le 07-03-2013 à 18:09:30    

:heink:  merde je sais pas ce que j'ai foutu, j'ai inversé clef/valeur dans le foreach, fatigué moi hier  :whistle:  
 
Bon, sinon, montre l'intégralité de ton code.

Reply

Marsh Posté le 07-03-2013 à 18:55:23    

pas de mal bistouille  
 
je viens de trouver le probleme :)  
 

Citation :


           $nomFichier = 'fichier.txt';
           $fileOpen = file($nomFichier);
           $numFileLine = count($fileOpen);
           for($i = 0; $i< $numFileLine; ++$i) {
               if (($fileOpen[$i]) == $temp) {
             unset($fileOpen[$i]);
               }
           }
           $fileRecord = implode('', $fileOpen);
           file_put_contents($nomFichier, $fileRecord);


 
et la ca marche :)
 
merci pour ton aide bistouille , tres precieuse :)
 
une derniere question :) et apres je te laisse  
 
suite à cette fonction au dessus je veux supprimer en meme temps le fichier qui correspont a la ligne , c'est une url http://www..................image.png
le hic c'est que l'image ce trouve dans un autre dossier plus haut il est à la racine de mon site  
 
j'ai donc fais un UNLINK mais j'ai une erreur :
 

Citation :

$temp = 'http://www.monsite.fr/img/image.png' // par ex


 
// je supprimer le http car unlink aime pas  

Citation :

$url_sup =str_replace("http://www.monsite.fr/","",$temp);


 
// je remonte a la racine de mon ftp ou ce trouve mon site  

Citation :

$url_sup = '/homez.xxx/monsite/www/'.$url_sup ;  
unlink($url_sup);


 
mais je me retrouve avec  
 

Citation :

Warning: unlink(/homez.xxx/monsite/www/img/image.png ) [function.unlink]: No such file or directory in /homez.xxx/monsite/www/........php on line 226


 
226 c'est le unlink  
 
j'ai loupé un truc ?
 
EDIT :
 
j'ai testé le @unlink j'ai pas d'erreur mais impossible de supprimer le fichier  
testé :
 
@unlink('http://www.monsite........png) // rien  
@unlink('../img/image.png) // rien non plus
 
 
EDIT 2 :
 
bon je pense avoir trouvé le soucis un "espace" qui traine  
 
quand je fais :
 

Citation :

unlink('/homez.xxx/monsite/www/img/image.png');


 
ca marche marche  
 
j'ai fais un echo de mon $url_sup qui est envoyé dans le unlink($url_sup)
et je me retrouve avec ça :

Citation :

unlink('/homez.xxx/monsite/www/img/image.png ');


 
apres le PNG j'ai un espace du coup ca bloque .... impossible de le virer je comprends pas
 
j'ai beau faire  
 

Citation :

$url_sup =str_replace(' ','',$url_sup);


 
$url_sup à toujours l'espace a la fin :( :(  
 


Message édité par pascal- le 07-03-2013 à 19:43:19
Reply

Marsh Posté le 07-03-2013 à 20:25:48    

Je suis pas bien sûr d'avoir tout saisi.
 
T'es sûr que c'est bien un espace ? À mon avis non, sinon ton str_replace fonctionnerait.
Je penche plus pour un saut de ligne, sers-toi de trim() sur ta variable, qui virera les tab, retours chariots, et sauts de lignes en début et fin de chaine.
 
Si ça fonctionne toujours pas, débogue avec count_chars() pour visualiser ce que ta chaine contient.

Reply

Marsh Posté le 07-03-2013 à 20:53:49    

en fait la valeur $url_sup qui est  
 
'http:/www.........imab/image.png '
 
je suis remonté plus haut elle se charge ainsi :
 
dans le fichier txt j'ai X lignes ainsi :
 
http://www..........image1.png
http://www..........image2.png
http://www..........image3.png
http://www..........image4.png
 
on imagine que $img_compt2 est = à 3
 

Citation :


                                                                                 $ouvre=fopen("fichier.txt","r+" );
           $i = 0;
           while ($i < ($img_compt2))
           {
           $temp = fgets($ouvre);
           $i++;
           }
           fclose($ouvre);    


 
$temp est donc egal = http://www..........image3.png
 
je viens de retester si je fais un : echo '='.$temp.'=' ;  
j'ai ça d'afficher : =http://www..........image3.png =  
alors je devrais avoir =http://www..........image3.png=
 
j'ai un espace apres le format du fichier


Message édité par pascal- le 07-03-2013 à 21:00:11
Reply

Marsh Posté le 07-03-2013 à 21:09:40    

auto reponse :) le trim a résolut le soucis  
 

Citation :


           $url_sup = (trim($url_sup)) ;
           unlink ($url_sup) ;


 
mmilllllllllllllllllllllllllllllllllllles merci bistouille

Reply

Marsh Posté le 08-03-2013 à 09:06:16    

On peut pas faire un unlink sur une url. On fait un unlink sur un path d'une fichier sur le HDD.
regardes du côté de dirname() et de la constante __FILE__ ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-03-2013 à 13:20:49    

rufo a écrit :

On peut pas faire un unlink sur une url. On fait un unlink sur un path d'une fichier sur le HDD.
regardes du côté de dirname() et de la constante __FILE__ ;)


 
en url relatif si ca marche :)

Reply

Marsh Posté le 18-02-2014 à 19:18:11    

bonjour j'ai essayé de virer les lignes dans mon fichier texte a chaque fois qui contien le mot tucbidule j'ai essayer le script trouvé ici mais sa ne fonctionne pas....
 

Citation :


    $ligneAVirer = 'trucbidule';
    $arrayFile = file('fichier.txt');
    foreach( $arrayFile as $line => $key )
    {
        if( trim($line) == $ligneAVirer )
            unset($arrayFile[$key]);
    }
    file_put_contents(implode("\n", $arrayFile));

Reply

Marsh Posté le 02-03-2014 à 12:27:29    

bon,
je laisse tomber...

Reply

Marsh Posté le 03-03-2014 à 07:33:39    

Code :
  1. $ligneAVirer = 'trucbidule';
  2.     $arrayFile = file('fichier.txt');
  3.     foreach( $arrayFile as $key => $line )
  4.     {
  5.         if( trim($line) == $ligneAVirer )
  6.             unset($arrayFile[$key]);
  7.     }
  8.     file_put_contents(implode("\n", $arrayFile));


 
;)

Reply

Marsh Posté le 04-03-2014 à 16:37:48    

T'as encore oublié de mettre le nom du fichier dans lequel sauvegarder dans file_put_contents :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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