Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2007, 14h30   #1
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
Par défaut Remplacement de chaines de caractères

Bonjour,

j'ai vraiment du mal en php avec les remplacement de caractère et quand utiliser str_replace ou ereg_replace ou preg_replace. Je n'arrive pas à comprendre (j'ai deja cherché sur le net).

par exemple, dans un fichier, j'ai une series d'adresses mail et dans le fichier elles sont du type:

moi@toi.com., moi2@toi2.com., ...

je voudrais remplacer le ".," par un ","

mais je n'arrive pas.

j'ai essayé

Code :
str_replace(".,","",$final_file);
mais nada...

quelqu'un peux m'expliquer comment faire et toutes les différences svp ?

Merci
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 14h43   #2
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
Déjà un premier point, dans ton exemple tu utilises la fonction
Code :
str_replace(".,","",$final_file);
mais pas de la bonne manière.

Le premier argument est la chaine à recherché
Le deuxième est la chaine qui remplace la chaine trouvé
Le troisième est la chaine dans laquelle on recherche
Code :
str_replace(".,",",",$final_file);
D'autre part la différence entre un str_replace et un preg_replace est dans la manière de rechercher la chaine. Un str_replace fait une recherche stricte d'égalité (la chaine doit être comme celle écrite dans le 1er argument) alors que preg_replace passe par une expression régulière, qui en gros permets de dire : cherche quelque chose qui ressemble à çà.

ereg_replace est obsolète sous php5 et il faut utilisé preg_replace.
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 14h59   #3
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
oui pardon j'ai oublié de mettre la "," quand j'ai ecrit le code

je dois peut-etre mal le placer dans mon code.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
// Creation du fichier final
$final_file = fopen("dead_mail.txt", "w+");
// Ouverture du fichier
$open = fopen("error_log.txt", "r");
 
// Lecture du fichier
$lecture = fread($open, filesize("error_log.txt"));
 
// Séparation des données
$data = explode(" ",$lecture);
 
// Ne garder que les données de type adresse mail et ecriture dans le fichier
 
foreach ($data as $mail)
{
if (ereg("@",$mail))
	{
		fwrite($final_file,$mail.", ");
	}
}
 
str_replace(".,",",",$final_file);
 
fclose($final_file);
 
?>
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 15h41   #4
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
Dans
Code :
str_replace(".,",",",$final_file);
tu utilises $final_file comme chaine dans laquelle tu dois rechercher, alors que $final_file est un identifiant de fichier et non pas une variable contenant une chaine de caractère.

En gros tu devrais plutot faire :
Code :
1
2
3
4
5
6
7
8
9
10
foreach ($data as $mail) {
if (ereg("@",$mail)) {
  $mail = str_replace(".,",",",$mail);
  fwrite($final_file,$mail.", ");
 }
}
 
fclose($final_file);
 
?>
En gros traiter la variable qui contient la chaine à traiter : $mail et celà dans la boucle et avant d'écrire $mail dans le fichier. D'autre part str_replace renvoi la chaine modifié et ne modifie pas directement la chaine que tu passes en argument.
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 16h29   #5
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
oki j'ai compris j'ai du faire ca

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
// Creation du fichier final
$final_file = fopen("dead_mail.sql", "w+");
// Ouverture du fichier
$open = fopen("error_log.txt", "r");
 
// Lecture du fichier
$lecture = fread($open, filesize("error_log.txt"));
 
// Séparation des données
$data = explode(" ",$lecture);
 
// Ne garder que les données de type adresse mail et ecriture dans le fichier
foreach ($data as $mail)
{
if (ereg("@",$mail))
	{
		$mail = $mail." ";
		$mail = str_replace(". ",", ",$mail);
		fwrite($final_file,$mail);
	}
	}
 
fclose($final_file);
 
?>
j'ai enfin compris pour le remplacement de texte.

Merci beaucoup
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h32.


 
 
 
 
Partenaires

Hébergement Web