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

Python Discussion :

surcharge de la classe string


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut surcharge de la classe string
    Bonjour,
    j'aimerais faire un truc qui me paraît réservé à l'élite pythonienne.

    Voilà :

    J'ai écrit un parseur de fichier texte ayant une syntaxe bien définie et je cherche à y retrouver des expressions particulières.
    Pour y parvenir, je lis un fichier texte dans une string, et j'utilise des expressions régulières dans tous les sens plus toutes sortes de méthodes de la classe string (replace, split, join, etc.).
    Quand j'ai isolé mon expression, je voudrais être capable de la situer dans la string d'entrée.
    L'idée que j'ai est de créer une surcharge de la classe string qui à chaque caractère associe sa position.
    Ensuite, tous les modifications de la chaîne doivent conserver les positions.
    Du coup, à la fin, quand mon expression est extraite, je n'ai qu'à lire la position associée au premier caractère.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    s  = 'spam and eggs'
    #     0123456789012
    #               111 
    s2 = s[9:] + s[:4]
    #  = 'eggsspam'
    #     90120123
    #      111
    J'ai permuté des morceaux de chaîne, mais la position initiale des caractères est conservée.

    C'est à dire que ma "super" string serait un interable de paires ( caractère , int ) sur lequel fonctionnent toutes les méthodes de la classe string.

    Et donc ma question : suis-je obligé de tout réécrire ou y a-t-il un moyen super rusé de n'écrire que ce qui change ?
    Je pense notamment à la classe char_trait de la classe std::string du c++.

    A vous les experts !
    merci

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    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
    class MyString (str):
        def __init__(self,s):
            self=s
        def MyMethod(self):
            return self[1:]
     
    S=MyString("Toto")
    print S[0] #classique
    print S.MyMethod()#personnalisée
     
    """exécution:
    >>> [evaluate untitled-1.py]
    T
    oto
    >>> 
    """
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

Discussions similaires

  1. [VB.NET]petit problème avec la classe string !!
    Par zouhib dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/06/2006, 11h58
  2. Question facile sur la classe string
    Par MarOne dans le forum Langage
    Réponses: 9
    Dernier message: 20/04/2006, 14h28
  3. la classe string
    Par amel2006 dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 16h11
  4. [C++]la classe String
    Par bechbech dans le forum MFC
    Réponses: 5
    Dernier message: 01/04/2006, 15h35
  5. Fuite mémoire de la classe string
    Par jean_barac dans le forum SL & STL
    Réponses: 7
    Dernier message: 28/07/2005, 23h12

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