Page 1 sur 2

Remplacer ou supprimer une chaîne de caratères dans un fichi

Posté : 04 déc. 2005, 22:02
par phpdog
Bonjour à tous :wink:

Je voudrai créer un script pour remplacer ou supprimer une chaîne de caratères dans un fichier.txt, quelqu'un saurait-il m'aider ?

Posté : 05 déc. 2005, 02:01
par jobherzt
- tu ouvres le fichier en mode 'w+'
- tu lis le contenu du fichier
- tu utilises str_replace ou preg_replace pour faire les manips que tu veux
- tu ecris le resultat dans le fichier
- tu ferme, et c'est fini :-)

c'est ce qu'il te fallait ?

Posté : 05 déc. 2005, 02:37
par phpdog
Bonjour jobherzt et merci beaucoup :wink:

Cela doit surement être se qu'il me faut, mais je ne sai spas comment utiliser str_replace ou preg_replace, pouriez vous me donnner un exemple ?

Posté : 05 déc. 2005, 02:48
par phpdog
J'ai déjà un petit souci:

Je vien d'essayer d'ouvrir un fichier avec ce code:
$fp = fopen ("fichier.txt", "r+")
La rien ne se passe, et avec sa:
$fp = fopen ("fichier.txt", "w+")
Le fichier.txt est completement vidé.

Posté : 05 déc. 2005, 03:06
par jobherzt
oops, exact, en le mettant n mode w+, je pensais surtout au fait que ca ecraserait le fihcier, mais j'avais zappe que ca l'ecraserait avant que tu n'ai pu le lire. donc je pense qu'il faut le faire en 2 etapes.

- d'abord ouvir en mode r
- lire le fichier avec http://de.php.net/manual/fr/function.fi ... ntents.php
- fermer le fichier
- faire les remplacements
- ouvir le fichier en mode w ( ecrasera le fichier original
- ecrire le reultat des remplacements avec http://de.php.net/manual/fr/function.fwrite.php
- fermer le fichier.

pour les focntions de remplacement :

- soit le ou les mots a remplacer sont entierement defini, et dans ce cas on utilise str_replace :
$texte=str_replace($motARemplacer,$remplacement, $texte);
ou les variables $motARemplacer et $remplacement peuvent etre des tableaux ( c'est pratique si tu as plusieurs remplacement a faire ).

- soit le ou les mots a remplacer sont seulement d'une certaine forme ( par exemple tout mot qui commence par un a, tout texte entre parenthese, entre accolades, tout mot qui contient au moins 3 chiffres, etc... ) et dans ce cas on emploie preg_replace avec ce qu'on appelle les "expressions regulieres". voir un tres bon tutoriel ici :
http://www.phpfrance.com/tutoriaux/inde ... pcre-ripat

et un exemple : remplacer tout les mots entre accolades par un mot en gras ( en HTML ) :
// ce code remplace tout les mots de la forme : {un certain texte} par <b>un certain texte</b>
$texte = preg_replace('#{([^}]+)}#U','<b>$1</b>',$texte);
ca a l'air barbare, mais en fait c'est assez simple et excessivement puissant, une fois qu'on sait s'en servir on ne peut plus s'en passer !!
voila, si tu penses avoir besoin d'expression reguliere et que tu ne sais vraiment pas t'en servir, precise ce que tu veux faire exactement..

Posté : 05 déc. 2005, 03:28
par phpdog
Merci encore jobherzt :wink:

J'ai esayer ceci pour l'instant:
<?php
	 $fp = fopen ("fichier.txt", "r");      // On ouvre le fichier 
	 file_get_contents($fp)                // On lit le fichier
	 fclose ($fp);                        // On ferme le fichier
	 $texte=str_replace('Merde' ,'',$texte); // on suprimme tout les [ Merde ] dans le fichier
	 $fp = fopen ("fichier.txt", "w+");      // On ouvre le fichier
           // On écrit le nouveau fichier
	 fclose ($fp);                        // On ferme le fichier
?>
Mais une erreur est renvoyer sur cette ligne:
	 $texte=str_replace('Merde' ,'',$texte); // on suprimme tout les [ Merde ] dans le fichier

Posté : 05 déc. 2005, 06:29
par ddbug
hello phpdog,

J'ai vu ton post en passant, je dirais que t'as tout simplement pas initialisé
ta variable $texte.
Je mettrais un truc du style :

Code : Tout sélectionner

$texte=file_get_contents($fp)
c'est dingue ce qu'on peut etre etourdi des fois :!:

bonne continuation

Posté : 05 déc. 2005, 08:53
par jobherzt
exact, $fp designe ton fichier, mais il faut bien que tu lui dise ou stocker le texte que tu as lu dedans..

Posté : 05 déc. 2005, 14:55
par phpdog
OK, don maitenant j'ai ceci:
<?php 
     $fp = fopen ("fichier.txt", "r");      // On ouvre le fichier 
     $texte=file_get_contents($fp))                // On lit le fichier 
     fclose ($fp);                        // On ferme le fichier 
     $texte=str_replace('Merde' ,'',$texte); // on suprimme tout les [ Merde ] dans le fichier 
     $fp = fopen ("fichier.txt", "w+");      // On ouvre le fichier 
           // On écrit le nouveau fichier 
     fclose ($fp);                        // On ferme le fichier 
?>

Et la j'ai une erreur sur la ligne 4.

Posté : 05 déc. 2005, 14:59
par iclo
Dis, tu ne pourrais pas y mettre un peu du tien ?
Parce que j'ai une erreur à la ligne 4, c'est un peu beaucoup limité comme info.
Quel est le message d'erreur ?
Qu'as-tu essayé pour solutionner le problême avant de poster?
Etc

nous ne sommes pas des débuggeures bénévoles en ligne. Tu as un problême, tu ne comprends quelques chose, ok on est là pour ça, mais pas pour faire tout le boulot à ta place...

Posté : 05 déc. 2005, 15:02
par phpdog
Bonjour Iclo :wink:

Voici l'erreur:

Code : Tout sélectionner

Parse error: parse error in
Ben justement la je ne pige pas.

Posté : 05 déc. 2005, 15:13
par jobherzt
Hum... tu as oublie un point virgule qqpart....... :D :D :D :D :D :D :D :D

[edit] et au meme endroit tu as une parentehese en trop :-)[/Edit]

je te laisse chercher aux alentour de la ligne 4 :-)

Posté : 05 déc. 2005, 15:16
par phpdog
Merci :wink:

J'ai rajouter se point virgule:
<?php 
     $fp = fopen ("fichier.txt", "r");      // On ouvre le fichier 
     $texte=file_get_contents($fp);                // On lit le fichier 
     fclose ($fp);                        // On ferme le fichier 
     $texte=str_replace('Merde' ,'',$texte); // on suprimme tout les [ Merde ] dans le fichier 
     $fp = fopen ("fichier.txt", "w+");      // On ouvre le fichier 
           // On écrit le nouveau fichier 
     fclose ($fp);                        // On ferme le fichier 
?> 
Et voici l'erreur maitenant:

Code : Tout sélectionner

Warning: file_get_contents() expects parameter 1 to be string, resource given in c:\WWW\remplc.php on line 3

Posté : 05 déc. 2005, 15:26
par jobherzt
excuse moi, je t'ai induit en erreur, mais ca prouve que tu n'as pas lu la doc :-) mauvais reflexe !! get_file_content ne prend pas en parametre un handle sur un fichier mais directement le nom du fichier. autrement dit, il n'y a pas besoin de l'ouvrir au prealable, ni de le fermer ensuite.

Posté : 05 déc. 2005, 15:33
par phpdog
Ah oui, effectivement, voila maitenant sa marche parfaitement:
<?php
$texte=file_get_contents("fichier.txt"); // On lit le fichier
$texte=str_replace('Merde' ,'',$texte); // on suprimme tout les [ Merde ] dans le fichier
$fp = fopen ("fichier.txt", "w+"); // On ouvre le fichier
// On écrit le nouveau fichier
fclose ($fp); // On ferme le fichier
?>