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 18/04/2007, 11h21   #1
Membre habitué
 
Inscription : juin 2006
Messages : 264
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 264
Points : 102
Points : 102
Par défaut preg_match() et str_replace()

Bonjour,

Je voulais savoir si preg_match() et str_replace() utilisés comme ci-dessous# sont compatibles,
Code :
$fichier = str_replace(preg_match("#([0]{1})#", $fichier), "RFQ", $fichier);
Citation:
Warning: preg_match() expects parameter 2 to be string, array given in /home/...
# Les données sont extraites d'un CSV contenant divers tarifs mais seuls les "0" uniques devraient être modifiés en RFQ.

En vous remerciant
ctrl+z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 11h27   #2
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Bonjour,

que vient faire ton preg_match ici ?
tu en a nullement besoin pour faire ce que tu as à faire.
un str_replace('0','RFQ',$fichier) suffit amplement.

$fichier contient quoi ?

si tu veux que $fichier contienne tout le contenu de ton fichier CSV alors il faut faire un :

Code :
str_replace('0','RFQ',file_get_contents('chemin_fichier'))
Si ta besoin de précision.

P.S : ton erreur est tout à fait normal est très explicite, il attend une variable de type string et tu lui met le retour de la fonction preg_match, donc pas correct.

Cordialement.
  Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 11h29   #3
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Salut,
oui mais à priori ca ne vas pas faire ce que tu veux car la tu remlplaces la valeur de retour de preg_match qui est le nombre de fois où le masque a été trouvé.
Pourquoi tu n'utilises pas directement preg_replace ?

[edit]+ 1 pour le str_replace vu la complexité du motif utilisé [/edit]
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 11h31   #4
Membre habitué
 
Inscription : juin 2006
Messages : 264
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 264
Points : 102
Points : 102
Oui mais si il ya d'autre tarifs, ex : 10(espace)990->1RFQ(espace)99RFQ est remplacé aussi et la c'est pas bon...
ctrl+z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 11h36   #5
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Dans ce cas donne le contenu de ton fichier CSV, car sa change tout.

Cordialement.
  Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 11h48   #6
Membre habitué
 
Inscription : décembre 2005
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 137
Points : 105
Points : 105
Code :
$text = str_replace (";0;",";RFQ;",$text);
Je pense que ça devrait fonctionner. Cela ne te remplacerais que les 0 seuls.
Bluespike62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h08   #7
Membre habitué
 
Inscription : juin 2006
Messages : 264
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 264
Points : 102
Points : 102
c'est pas que je chipote mais le bricolage ça tient pas longtemps, ex :
si la chaine contient ;0;0;0;0;
on obtient ;RFQ;0;RFQ;0; parce que le suivant est 0; dont si on recherche tous les 0; et il suffit qu'il y ait un tarif qui se termine par 0 (ex:1 990) et la c'est pas bon non plus...

Résultat : ;RFQ;RFQ;RFQ;RFQ;1 99RFQ;

Une regex est donc appropriée.
ctrl+z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h12   #8
Membre habitué
 
Inscription : décembre 2005
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 137
Points : 105
Points : 105
Faut savoir
Tu veux remplacer tous les 0 de ton fichier (0 => RFQ, 10 =>1RFQ, 506 =>5RFQ6, etc...) ou seulement le "zero" seul (0 => RFQ, 502 => 502, etc...) ?
Bluespike62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h19   #9
Membre habitué
 
Inscription : juin 2006
Messages : 264
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 264
Points : 102
Points : 102
oui
Citation:
seulement le "zero" seul (0 => RFQ, 502 => 502, etc...) ?
dsl
ctrl+z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h21   #10
Membre habitué
 
Inscription : décembre 2005
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 137
Points : 105
Points : 105
Oui ? Oui à quoi ?
Bluespike62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h22   #11
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Y a surement plus simple mais c'est ce qui me vient à l'esprit :

Code :
1
2
3
4
function replace($matches)	{
	return $matches[0] == '0' ? 'RFQ' : $matches[0];
}
$str = preg_replace_callback('`[0-9]+`', 'replace', $str);
Tu peux aussi faire un simple explode et un strtr sur chaque ligne de ton fichier.
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h34   #12
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Perso je t'aurai plus mis ça (pour la fonction de Djakisback) :
Code :
$str = preg_replace_callback('`[^;]+`', 'replace', $str);
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 12h40   #13
Membre habitué
 
Inscription : juin 2006
Messages : 264
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 264
Points : 102
Points : 102
oui ça fonctionne mieux comme ça.
ctrl+z 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 06h25.


 
 
 
 
Partenaires

Hébergement Web