Supprimer la ligne X d'un fichier txt - PHP - Programmation
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 ?   
  
 
- http://www.commentcamarche.net/for [...] xte-en-php 
- http://forum.hardware.fr/hfr/Progr [...] 3673_1.htm 
 
 
 
 
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.
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  
 
Marsh Posté le 06-03-2013 à 19:27:19
Ta variable $ArrayFile n'est pas un array, mais une chaine. 
 
Utilise file() 
 
| Code : 
 | 
 
 
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 ?
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.
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  
 
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   
  
 
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 : 
 | 
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 
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 .
 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 
Marsh Posté le 07-03-2013 à 18:09:30
  merde je sais pas ce que j'ai foutu, j'ai inversé clef/valeur dans le foreach, fatigué moi hier
  merde je sais pas ce que j'ai foutu, j'ai inversé clef/valeur dans le foreach, fatigué moi hier   
  
 
Bon, sinon, montre l'intégralité de ton code.
Marsh Posté le 07-03-2013 à 18:55:23
pas de mal bistouille  
 
je viens de trouver le probleme  
  
 
| Citation :   | 
 
 
et la ca marche  
 
 
merci pour ton aide bistouille , tres precieuse  
 
 
une derniere question  et apres je te laisse
 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 ;   | 
 
 
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  
  
  
 
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.
Marsh Posté le 07-03-2013 à 20:53:49
en fait la valeur $url_sup qui est  
 
'http www.........imab/image.png '
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 :   | 
 
 
$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 
Marsh Posté le 07-03-2013 à 21:09:40
auto reponse  le trim a résolut le soucis
 le trim a résolut le soucis  
 
| Citation :   | 
 
 
mmilllllllllllllllllllllllllllllllllllles merci bistouille
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__ 
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.  | 
 
 
en url relatif si ca marche  
 
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 :   | 
Marsh Posté le 03-03-2014 à 07:33:39
| Code : 
 | 
 
 
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 
Marsh Posté le 05-03-2013 à 00:17:01
bonjour à tous ,
j'ai sous la main un fichier txt avec plusieurs lignes :
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 :
voiture
camion
velo
train
autre
.........
mais ça :
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