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 :

Problème de decoupage de chaine erronnée


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Problème de decoupage de chaine erronnée
    voici mon code
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    def filtrer(src, dst):
        """Fonction de traitement.
     
        Lit et traite ligne par ligne le fichier source (src).
        pour composé le fichier csv (dst).
        Est ajouter la convertion
        """
     
        # lecture des données
        for ligne in src:
            type = ligne[0:1]
            ps  = ligne[1:9]
            filler  = ligne[10:1]
            numsec = ligne[11:15]
            numfac = ligne[26:10]
            filler_2 = ligne[36:1]
            filler_3 = ligne[37:14]
            filler_4 = ligne[51:4]
            montant_a = ligne[55:8]
            print( ligne )
            vl_numfac = "numfac: %s- " % numfac
            vl_numsec = "numsec: %s- " % numsec
            print( vl_numfac )
            print( vl_numsec )
            print( montant_a )
     
     
     
     
          #  print("%s    %f", montant_a, montant_n)
            # Ecriture des données dans le fichier destination
            dst.write("%s;%s;%s\n" % (type, ps, numsec))
            pass
     
     
     
    # Ouverture du fichier source
    source = open("FICin.txt", "r")
     
    # Ouverture du fichier destination
    destination = open("FICout.csv", "w")
     
    try:
        # Appeler la fonction de traitement
        filtrer(source, destination)
     
    finally:
        # Fermeture du fichier destination
        destination.close()
     
        # Fermerture du fichier source
        source.close()

    contenu du fichier lu

    43701000A7 166053701029806030024932 00000000000009

    Le résultat de l’exécution du fichier:


    numfac: -
    numsec: 1660-

    pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            numsec = ligne[11:15]
            numfac = ligne[26:10]
    ne retourne pas les valeurs de l'extraction ????

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par dedalios Voir le message
    pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            numsec = ligne[11:15]
            numfac = ligne[26:10]
    ne retourne pas les valeurs de l'extraction ????
    Sans doute parce que tu spécifies pour ton slice des valeurs incorrectes.
    Tu penses récupérer quoi en indiquant ligne[26:10] ?


  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut problème
    Citation Envoyé par bistouille Voir le message
    Salut.



    Sans doute parce que tu spécifies pour ton slice des valeurs incorrectes.
    Tu penses récupérer quoi en indiquant ligne[26:10] ?

    Mon erreur a été de supposé à la lecture d'exemple que var[a:b] voulait dire extraire de var la valeur de la chaine débutant en a pour une longueur de b.
    Alors qu'en réalité (5s après ce post) , j'ai constaté que var[a:b] le valeur a et b représente debut /fin de chaine var : codage var[a:b:k]

  4. #4
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut petit à petit
    voici la correction

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #
    #
     
    def filtrer(src, dst):
        """Fonction de traitement.
     
        Lit et traite ligne par ligne le fichier source (src).
        pour composé le fichier csv (dst).
        Est ajouter la convertion
        """
     
        # lecture des données
        for ligne in src:
            type = ligne[0:1]
            ps  = ligne[1:10]
            filler_1 = ligne[10:1]
            numsec = ligne[11:26]
            numfac = ligne[26:35]
            filler_2 = ligne[36:37]
            filler_3 = ligne[37:50]
            filler_4 = ligne[51:55]
            montant_a = ligne[55:63]
            montant_b = ligne[64:72]
            n_montant_a = float (montant_a) / 100
            n_montant_b = float (montant_b) / 100
            acte  = ligne[72:75]
    # debut
            print( ligne )
            vl_numfac = "numfac: %s- " % numfac
            vl_numsec = "numsec: %s- " % numsec
            vl_montant_a = "montant_a: %s- " % montant_a
            vl_montant_b = "montant_a: %s- " % montant_a
            print( vl_numfac )
            print( vl_numsec )
            print( vl_montant_a )
            print( n_montant_a )
            print( vl_montant_b )
            print( n_montant_b )
            print( acte )
    # debut
            vl_montant_b = "n_montant_a :%8.2f " % n_montant_a
            print( vl_montant_b )
     
            # Ecriture des données dans le fichier destination
            dst.write("%s;%s;%s;%s;%8.2f\n" % (type, ps, numsec, numfac,n_montant_a))
            pass
     
     
     
    # Ouverture du fichier source
    source = open("FICin.txt", "r")
     
    # Ouverture du fichier destination
    destination = open("FICout.csv", "w")
     
    try:
        # Appeler la fonction de traitement
        filtrer(source, destination)
     
    finally:
        # Fermeture du fichier destination
        destination.close()
     
        # Fermerture du fichier source
        source.close()

    pour autant je dois trouver un solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            dst.write("%s;%s;%s;%s;%8.2f\n" % (type, ps, numsec, numfac,n_montant_a))
    %8.2f met dans la zone des blancs devant
    numfac,n_montant_a
    F30024932; 52.67

    hors je cherche a obtenir
    numfac,n_montant_a
    F30024932;00000052.67

    ceci étant il existe peut être un librairie python pour la conversion dans ce format ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu dois le précéder d'un zéro, toutefois la première valeur de l'argument de formatage donne le nombre de caractères en tout, donc avec le point et les décimales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> a = 52.67
    >>> print("*%08.2f*" % a)
    *00052.67*
    >>> print("*%011.2f*" % a)
    *00000052.67*

  6. #6
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut etrange reaction
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    import string
    import sys
    #
    #
    
    def convertir(src, format , dst):
        n_src = float(src) / 100
        print (src)
        dst = format % n_src
        dst = dst.strip()
        dst = dst.replace('.', ',')
        pass
    
    def filtrer(src, dst):
        """Fonction de traitement.
    
        Lit et traite ligne par ligne le fichier source (src).
        pour composé le fichier csv (dst).
        Est ajouter la convertion
        """
    
        # lecture des données
        for ligne in src:
            type = ligne[0:1]
            ps  = ligne[1:10]
            filler_1 = ligne[10:1]
            numsec = ligne[11:26]
            numfac = ligne[26:35]
            filler_2 = ligne[36:37]
            filler_3 = ligne[37:50]
            filler_4 = ligne[51:55]
            montant_a = ligne[55:63]
            montant_b = ligne[64:72]
    
            acte  = ligne[72:75]
    
            # c_montant_a = "%8.2f"  % n_montant_a
            # c_montant_a = c_montant_a.strip()
            # c_montant_a = c_montant_a.replace('.', ',')
            c_montant_a = ""
            convertir(montant_a, "%8.2f", c_montant_a )
            print (c_montant_a)
    
            # Ecriture des données dans le fichier destination
         #   dst.write("%s;%s;%s;%s;%8.2f\n" % (type, ps, numsec, numfac,n_montant_a))
            dst.write("%s;%s;%s;%s;%s\n" % (type, ps, numsec, numfac, c_montant_a))
            pass
    
    
    
    # Ouverture du fichier source
    source = open("FICin.txt", "r")
    
    # Ouverture du fichier destination
    destination = open("FICout.csv", "w")
    
    try:
        # Appeler la fonction de traitement
        filtrer(source, destination)
    
    finally:
        # Fermeture du fichier destination
        destination.close()
    
        # Fermerture du fichier source
        source.close()
    comment faire pour que la valeur de c_montant_a soit le résultat de def convertir(src, format , dst):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         convertir(montant_a, "%8.2f", c_montant_a )
            print (c_montant_a)

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par dedalios Voir le message
    comment faire pour que la valeur de c_montant_a soit le résultat de def convertir(src, format , dst):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         convertir(montant_a, "%8.2f", c_montant_a )
            print (c_montant_a)
    Le résultat d'une fonction est l'objet qu'elle retourne (via le mot clé "return") et qui pourra être assigné à une variable.... Comme on l'apprend dans n'importe quel tuto.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Problème avec un decoupage de chaine
    Par Xenon03 dans le forum ASP
    Réponses: 5
    Dernier message: 17/04/2009, 15h39
  2. [RegEx] Preg_split decoupage de chaine
    Par Dargos dans le forum Langage
    Réponses: 6
    Dernier message: 10/04/2006, 10h32
  3. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  4. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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