Page 1 sur 1

Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:15
par gui
Bonjour,
je cherche une fonction proche de "str_pad" qui me permettrai de remplacer dans une chaine de caractère, une string (plus petite) par une autre à partir d'une position connue.

Exemple:

Code : Tout sélectionner

chaine de caract: MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLAAAAAAAAAAIGRNTNGVITKDEAEKLFNQD String(chaine à rechercher dans la chaine de caract) à la position 39 et d'une longueur de 10 caractères AAAAAAAAAA
J'ai donc besoin d'une fonction qui permettrai de remplacer cette chaine de AAA... à la position 39 (si il ya une autre chaine identique dans la chaine de caract elle ne doit pas être modifié) par une chaine de XXX... de la même longueur.
J'ai stoké dans une tableau toutes les positions, les longueurs des chaines ...
Je suis partit sur strlen mais je ne voie pas comment remplacer une fois la chaine renvoyé.

Meci d'avance pour votre aide

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:42
par gui
J'ai aussi vu quelque part qu'il était posible d'utiliser $value[$key]="X";
Le seul problème avec cette fonction est qu'elle ne remplace que le premier caratère
pour le même exemple :
MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLXAAAAAAAAAIGRNTNGVITKDEAEKLFNQD

J'ai donc essayé de l'adapter en essayant de rajouter autant de "X" que la longueur de la chaine mais cela ne fonctionne pas:
$value[$key]="X*{$nb}";

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:45
par stealth35
hello, un simple str_replace replace ferais l'affaire, utilise le paramètre count pour en prendre compte qu'un seul :wink:

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:50
par gui
Je ne sais pas si cette fonction sera efficace car même en mettant le paramètre "count" à 1, si la premiere ocurence n'est pas la chaine à remplacer (diff de la position) alors cela ne fonctionnera pas.
N'existe t-il pas un moyen d'adapter le nombre de "X" pour qu'il y'en ai le même nombre que $nb?

"X*$nb"

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:53
par stealth35
comment tu sais a quelle endroit de la chaine c'est a remplacer ?

EDIT : regarde du coté du substr_replace

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 10:54
par gui
Autant pour moi, cette fonction $value[$key]="X*$nb"; ne permet que de remplacer un seul caratère.

C'est une valeur que je récupérer avec les string que je dois remplacer, j'ai la position de cette string dans la chaine de caratère et la string elle même.

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 11:06
par macgawel
La fonction substr_replace() devrait faire toon bonheur...
$chaine = "MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLAAAAAAAAAAIGRNTNGVITKDEAEKLFNQD";
$replace = "AAAAAAAAAA";
$pos = 39;
$long = strlen($replace);
echo substr_replace($chaine, $replace, $pos, $long);

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 11:19
par gui
Merci beaucoup la fonction fait exactement ce que je voulais =D>
Le seul problème qui me reste est que je dois adapter le nombre de "X" qui doit être egal à la longueur de la chaine que je remplace.
Tout le reste fonctionne très bien.
J'ai essayé "X*$nb" et de nombreux derivé mais aucun ne fonctionne

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 11:39
par stealth35

Re: Remplacer chaine de caractère à une position donnée

Posté : 27 avr. 2010, 14:11
par gui
Ok merci pour tout

Autre solution en boucle:

for($a=0;$a<$nb;$a++){ 
        $x.="X";
}