Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1052 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Supprimer la ligne X d'un fichier txt

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer la ligne X d'un fichier txt

n°2178738
pascal-
Posté le 05-03-2013 à 00:17:01  profilanswer
 

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
mood
Publicité
Posté le 05-03-2013 à 00:17:01  profilanswer
 

n°2178845
cvb
Posté le 05-03-2013 à 21:45:49  profilanswer
 

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
 
 
 
 

n°2178888
rufo
Pas me confondre avec Lycos!
Posté le 06-03-2013 à 10:02:15  profilanswer
 

$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
n°2179057
pascal-
Posté le 06-03-2013 à 18:47:50  profilanswer
 

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
n°2179062
bistouille
Posté le 06-03-2013 à 19:27:19  profilanswer
 

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));


 

n°2179067
pascal-
Posté le 06-03-2013 à 19:46:57  profilanswer
 

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 ?

n°2179070
bistouille
Posté le 06-03-2013 à 20:16:28  profilanswer
 

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
n°2179074
pascal-
Posté le 06-03-2013 à 20:50:03  profilanswer
 

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
n°2179087
bistouille
Posté le 06-03-2013 à 22:01:29  profilanswer
 

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));

n°2179108
pascal-
Posté le 07-03-2013 à 04:24:09  profilanswer
 

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 :)

mood
Publicité
Posté le 07-03-2013 à 04:24:09  profilanswer
 

n°2179194
pascal-
Posté le 07-03-2013 à 14:37:36  profilanswer
 

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
n°2179231
bistouille
Posté le 07-03-2013 à 18:09:30  profilanswer
 

: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.

n°2179233
pascal-
Posté le 07-03-2013 à 18:55:23  profilanswer
 

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
n°2179244
bistouille
Posté le 07-03-2013 à 20:25:48  profilanswer
 

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.

n°2179246
pascal-
Posté le 07-03-2013 à 20:53:49  profilanswer
 

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
n°2179247
pascal-
Posté le 07-03-2013 à 21:09:40  profilanswer
 

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

Citation :


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


 
mmilllllllllllllllllllllllllllllllllllles merci bistouille

n°2179278
rufo
Pas me confondre avec Lycos!
Posté le 08-03-2013 à 09:06:16  profilanswer
 

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
n°2179355
pascal-
Posté le 08-03-2013 à 13:20:49  profilanswer
 

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 :)

n°2220093
deund
Posté le 18-02-2014 à 19:18:11  profilanswer
 

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));

n°2221217
deund
Posté le 02-03-2014 à 12:27:29  profilanswer
 

bon,
je laisse tomber...

n°2221267
bistouille
Posté le 03-03-2014 à 07:33:39  profilanswer
 

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));


 
;)

n°2221472
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2014 à 16:37:48  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Supprimer la ligne X d'un fichier txt

 

Sujets relatifs
comment enregistrer le chemin d'un fichier pdf dans une BD[Résolu]Copier fichier das un autre avec dossier date et heure
Macro VBA Excel pour écrire dans un fichierdéplacement fichier sur lecteur réseau
problème retour à la ligneRenommage de fichier avec le contenu de la 1ère ligne
[BATCH] supprimer le dossier le plus vieuxMoulinette à partir d'un fichier CSV
Macro pour supprimer une ligne 
Plus de sujets relatifs à : Supprimer la ligne X d'un fichier txt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR