IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comment remplacer une partie de chaine ?


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut Comment remplacer une partie de chaine ?
    Bonsoir,

    J'ai une chaine de caractères composée 3 morceaux
    collés les uns aux autres.
    - chaine de gauche --> longueur variable
    - chaine du milieu --> Date longueur fixe
    - chaine de droite --> chaine vatiable de longueur fixe

    exemple : sdfgsdfgsdfgsdfgsdfgsfgs2009-06/chainefixe

    je voudrais remplacer dans cette chaine 2009-06
    par 2007-11.
    mais de la chaine 2009-06 seule la partie 20 ne change
    pas et ne se retrouve nulle part ailleurs dans la chaine complète.

    J'ai bidouillé avec la série des STR... mais sans rédultats !

    Un petit conseil SVP

  2. #2
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    la chaine est donc
    str= 'sdfgsdfgsdfgsdfgsdfgsfgs2009-06/chainefixe';
    si le / final avant "chainefixe" est fixe également
    on peut donc supputer une variable
    $fin_a_trouver = "chainefixe" + 1;

    si la structure est toujours
    .....1234-12/chainefixe
    on peut supputer 2 variables
    $début_a_trouver = $fin_a_trouver -7;
    $longueur = 7;

    le segment de string sur lequel on doit travailler devrait donc correspondre à
    $rest = substr(str, $longueur, -$fin_a_trouver);

    1 chaine
    3 bornes

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    OK, j'avais déjà essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $popo= str_replace(r20', $remp, $don_1);
    ou $remp = "2007-11"

    mais cela remplace la chaine a partir de 20

    2009-06/ devient r2007-11-06/

    Quelle serai la bonne syntaxe en employant : substr(str, ?

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    aucune idée de ce que veux dire
    $popo= str_replace(r20', $remp, $don_1);
    ça veut dire quoi ?
    r20'

    une chose me semble certaine :
    pas question de remplacer quoi que ce soit au vol dans une chaîne que l'on ne maîtrise pas
    mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

    str_replace() retourne une chaîne ou un tableau, dont toutes les occurrences de search dans subject ont été remplacées par replace .
    Comment être certain que "search" ne se trouve pas dans la première partie ?
    genre
    sdfgsdfgs2009-06dfgsdfgsdfgsfgs2009-06/chainefixe

    les seules données que tu sembles contrôler se situent en fin de chaine :
    http://www.php.net/manual/fr/function.substr.php

    $rest = substr("abcdef", -3, -1); // retourne "de"

    et donc si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $str = 'sdfgsdfgs2009-06dfgsdfgsdfgsfgs2009-06/chainefixe'
    $fin_a_trouver = "chainefixe" + 1; // 
    $début_a_trouver = $fin_a_trouver +7; // 
     
    $le_debut = substr($str, , -$début_a_trouver,);
    $rest = substr($str, -$début_a_trouver, -$fin_a_trouver);
    les manipulation désirées sur $rest
    genre $rest =  str_replace('xx', 'yy',  rest);
    $str = $le_debut.$rest;
    non ?

  5. #5
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    $le_debut = substr($str, , -$début_a_trouver,);

    oublié le zéro

    $le_debut = substr($str, 0, -$début_a_trouver,);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Merci cholopat,

    Je suis en train de tester

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    erreur : Parse error: syntax error, unexpected T_VARIABLE
    a la ligne : $debut_a_trouver = $fin_a_trouver +7; //

  8. #8
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    ooooulaa ...
    on va donc tenter de refaire le tout, sans penser à l'apéritif !

    et oublions le littéraire dans les variables ...
    "$début_a_trouver = $fin_a_trouver +7; "
    à remplacer par
    "$debut_a_trouver = $fin_a_trouver + 7;" // sans accent sur le é.

    l'important est de comprendre la fonction substr
    $rest = substr("abcdef", -3, -1); // retourne "de"

    d'une chaîne on en soustrait un morceau (avec deux bornes dans ta problématique).
    $rest = substr("abcdef", -3, -1); // retourne "de"
    ici
    $rest = substr("sdfgsdfgsdfgsdfgsdfgsfgs2009-06/chainefixe", -18, -11); //
    -11 parce que 11 caractères dans "/chainefixe", la borne finale
    -18 parce que 7 caractères dans "2009-06", + 11, on a le début de la borne

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Ok pour le substr (il cerne une chaine dans une chaine)
    donc on connait la chaine a remplacer
    et avec str_replace on remplace les chaines

    Si j'ai tout compris

    Entre temps, j'avais bricollé cela qui fonctionne mais pas optimisé !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?PHP
    echo "<BR>";
    // date a remplacer
    $dat_m = "12";
    $dat_a = "08";
     
    $don_1 = "lapremièrechainedecaractères&suite&&&&&/2009-06/f6201152abcd";
    echo "Origine : ".$don_1;
     
    $deja_a1 = $don_1{42};
    $deja_a2 = $don_1{43};
    $deja_a1 = $deja_a1.$deja_a2;
     
    $deja_m1 = $don_1{45};
    $deja_m2 = $don_1{46};
    $deja_m1 = $deja_m1.$deja_m2;
     
    $deja = "/20".$deja_a1."-".$deja_m1;
     
    $remp = "/20".$dat_a."-".$dat_m;
     
    $popo= str_replace($deja, $remp, $don_1); 
    echo "<BR>";	
    echo "Bricolé : ".$popo;
    ?>

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Points : 153
    Points
    153
    Par défaut
    Pour résumer, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $rest = substr($don_1, -18, -13); 
    $rempp = $dat_a."-".$dat_m;
    $popo= str_replace($rest, $rempp, $don_1);
    OK, cela fonctionne ! avec 2 lignes de programme

    Un Grand MERCI cholopat pour ton aide et tes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [E-02] Remplacer une partie de chaine de caractère par une autre
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/09/2008, 22h19
  2. Réponses: 5
    Dernier message: 24/02/2006, 10h12
  3. [C++] Comment copier une partie d'une chaine?
    Par irnbru dans le forum C++
    Réponses: 11
    Dernier message: 25/10/2005, 15h36
  4. Remplacer une PARTIE de chaine de caractères dans un champ
    Par Turlututuchapopointu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/08/2005, 11h57
  5. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo