Forum Programmation.python Limitation de replace

Posté par  (site web personnel) .
Étiquettes : aucune
0
8
juil.
2004
Sur une chaine "21351|TOTO|||||||||DEDE|12|47" passe un double pipe sur deux ...
Obligé de passé de
content[nb] = content[nb].replace('||', '|NULL|')

à
while content[nb].find('||') <> -1:
content[nb] = content[nb].replace('||', '|NULL|')

Une idée ?
  • # Euh

    Posté par  . Évalué à 2.

    Il te prends les "|" deux par deux et te les remplace par |NULL|
    d'ou (les "_" sont la pour montrer les paires replacés):

    -||- => -|NULL|-
    -||-| => -[NULL|-|
    et
    -||--||- => -|NULL|--|NULL|-

    J'ai bon ?
    • [^] # Re: Euh

      Posté par  (site web personnel) . Évalué à 2.

      Le problème c'est qu'il fait :
      -||-||||- => -|NULL|-|NULL||NULL|-
      au lieu de
      -||-||||- => -|NULL|-|NULL|NULL|NULL|-
      • [^] # Re: Euh

        Posté par  (site web personnel) . Évalué à 2.

        Bein nan c'est logique y a pas de bleme.
        tu as 6 pipe:
        ||||||
        tu lui demande de remplacer deux pipes par |NULL|
        alors il itere sur la chaine et des qu'il trouve deux pipe il les change en |NULL|
        -> (les pipes entre ' ' sont ceux trouvés par la fonction de remplacement)
        1 '||'||||
        2 |NULL|'||'||
        3 |NULL||NULL|'||'
        4 |NULL||NULL||NULL|

        les doubles pipes qui restent sont generés par ta chaine de remplacement, et il est tout a fais normal qu'ils restent. La fonction ne s'amusant pas a reparcourir toute la chaine a chaque fois,
        • [^] # Re: Euh

          Posté par  (site web personnel) . Évalué à 2.

          Oui, j'ai compris après en faisant du pas à pas que tout était juste, ce que je cherche maintenant c'est à obtenir un code plus "propre" car je trouve celui là pas très joli ...

          :)
          • [^] # Re: Euh

            Posté par  (site web personnel) . Évalué à 2.

            Bon, j'ai ça ...

            for nb in range(0,len(content)):
            spl = content[nb].split("|")
            for nb2 in range(0,len(spl)):
            if spl[nb2] in ("", "\n"):
            spl[nb2] = "NULL"
            if spl[nb2][-1] == "\n":
            spl[nb2] = spl[nb2][0:-1]
            content[nb] = "|".join(spl)
  • # idee

    Posté par  . Évalué à 2.

    a defaut , tu peux decouper la chaine suivant '|' puis la reconstruire en mettant un 'NULL' chaque fois que c'est un element vide.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.