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 saut de ligne incompréhensible [Python 2.X]


Sujet :

Python

  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Problème saut de ligne incompréhensible
    Bonjour à tous,

    Je viens vers vous car j'ai un petit soucis sur un petit script. Cela fait un petit moment que j'ai pas codé un script en python et là je sèche.

    Pour vous expliquer mon problème je vous explique ce que je fais.

    Alors j'ai un fichier contenant des cartes GRID (fichier calcul Nastran pour les connaisseurs) et d'autres cartes divers. Mon script ne s'occupe que des cartes GRID et il a pour but de changer l'ID de la carte.

    Voici un exemple de carte GRID :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRID     86725          8290.   1863.13 2003.55
    Dans cet exmple l'ID c'est le 86725 et mon script le change comme il le faut.

    Mon soucis intervient quand je tombe sur une ligne qui n'est pas une carte GRID et dans ce cas je demande à mon script de ré-écrire la ligne telle quelle.

    Sauf que j'ai un soucis de saut de ligne que je n'arrive pas à comprendre.

    Alors voici le fichier d'entré que j'utilise avec la ligne qui commence par CROD pour le test MPC_NODE.rar :

    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
     
    GRID     86725          8290.   1863.13 2003.55                                 
    GRID     86726          8290.   1842.13 2003.55                                 
    GRID     86727          8290.   1821.13 2003.55                                 
    GRID     86728          8290.   1800.13 2003.55                                 
    GRID     86729          8288.   1750.   2003.55
    CROD     10000                                 
    GRID     86730          8288.   1726.   2003.55                                 
    GRID     86731          8288.   1689.   2003.55                                 
    GRID     86732          8288.   1665.5  2003.55                                 
    GRID     86733          8288.   1642.   2003.55                                 
    GRID     86734          8288.   1617.9  2003.55                                 
    GRID     86735          8288.   1593.8  2003.55                                 
    GRID     86736          8288.   1569.7  2003.55                                 
    GRID     86737          8288.   1545.6  2003.55                                 
    GRID     86738          8288.   1521.5  2003.55                                 
    GRID     86739          8288.   1498.   2003.55                                 
    GRID     86740          8288.   1474.5  2003.55                                 
    GRID     86741          8288.   1437.5  2003.55                                 
    GRID     86742          8288.   1414.   2003.55                                 
    GRID     86743          8288.   1390.5  2003.55                                 
    GRID     86744          8288.   1369.4  2003.55                                 
    GRID     86745          8288.   1348.3  2003.55                                 
    GRID     86746          8288.   1327.2  2003.55                                 
    GRID     86747          8288.   1306.1  2003.55                                 
    GRID     86748          8288.   1285.   2003.55                                 
    GRID     86749          8288.   1261.5  2003.55                                 
    GRID     86750          8288.   1238.   2003.55                                 
    GRID     86751          8288.   1201.   2003.55                                 
    GRID     86752          8288.   1177.5  2003.55                                 
    GRID     86753          8288.   1154.   2003.55                                 
    GRID     86754          8288.   1131.42 2003.55                                 
    GRID     86755          8288.   1108.83 2003.55                                 
    GRID     86756          8288.   1086.25 2003.55                                 
    GRID     86757          8288.   1063.67 2003.55                                 
    GRID     86758          8288.   1041.08 2003.55                                 
    GRID     86759          8288.   1018.5  2003.55                                 
    GRID     86760          8288.   995.    2003.55                                 
    GRID     86761          8288.   971.5   2003.55                                 
    GRID     86762          8290.   934.5   2003.55                                 
    GRID     86763          8290.   903.017 2005.55                                 
    GRID     86764          8290.   881.443 2005.55                                 
    GRID     86765          8290.   859.869 2006.55                                 
    GRID     86766          8290.   838.295 2006.55                                 
    GRID     86767          8290.   816.722 2007.55
    et voici le résultat que j'obtiens :

    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
     
    GRID    99900000        8290.   1863.13 2003.55                         
    GRID    99900001        8290.   1842.13 2003.55                         
    GRID    99900002        8290.   1821.13 2003.55                         
    GRID    99900003        8290.   1800.13 2003.55                         
    GRID    99900004        8288.   1750.   2003.55
     
    CROD     10000                                 
     
    GRID    99900005        8288.   1726.   2003.55                         
    GRID    99900006        8288.   1689.   2003.55                         
    GRID    99900007        8288.   1665.5  2003.55                         
    GRID    99900008        8288.   1642.   2003.55                         
    GRID    99900009        8288.   1617.9  2003.55                         
    GRID    99900010        8288.   1593.8  2003.55                         
    GRID    99900011        8288.   1569.7  2003.55                         
    GRID    99900012        8288.   1545.6  2003.55                         
    GRID    99900013        8288.   1521.5  2003.55                         
    GRID    99900014        8288.   1498.   2003.55                         
    GRID    99900015        8288.   1474.5  2003.55                         
    GRID    99900016        8288.   1437.5  2003.55                         
    GRID    99900017        8288.   1414.   2003.55                         
    GRID    99900018        8288.   1390.5  2003.55                         
    GRID    99900019        8288.   1369.4  2003.55                         
    GRID    99900020        8288.   1348.3  2003.55                         
    GRID    99900021        8288.   1327.2  2003.55                         
    GRID    99900022        8288.   1306.1  2003.55                         
    GRID    99900023        8288.   1285.   2003.55                         
    GRID    99900024        8288.   1261.5  2003.55                         
    GRID    99900025        8288.   1238.   2003.55                         
    GRID    99900026        8288.   1201.   2003.55                         
    GRID    99900027        8288.   1177.5  2003.55                         
    GRID    99900028        8288.   1154.   2003.55                         
    GRID    99900029        8288.   1131.42 2003.55                         
    GRID    99900030        8288.   1108.83 2003.55                         
    GRID    99900031        8288.   1086.25 2003.55                         
    GRID    99900032        8288.   1063.67 2003.55                         
    GRID    99900033        8288.   1041.08 2003.55                         
    GRID    99900034        8288.   1018.5  2003.55                         
    GRID    99900035        8288.   995.    2003.55                         
    GRID    99900036        8288.   971.5   2003.55                         
    GRID    99900037        8290.   934.5   2003.55                         
    GRID    99900038        8290.   903.017 2005.55                         
    GRID    99900039        8290.   881.443 2005.55                         
    GRID    99900040        8290.   859.869 2006.55                         
    GRID    99900041        8290.   838.295 2006.55                         
    GRID    99900042        8290.   816.722 2007.55
    Comme vous voyez le changement d'ID se passe correctement mais les deux sauts de lignes; aux lignes 7 et 9 me pose problème je ne souhaite pas les avoir et je ne comprend pas pourquoi ils y sont.

    Je souhaite obtenir ceci :

    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
     
    GRID    99900000        8290.   1863.13 2003.55                         
    GRID    99900001        8290.   1842.13 2003.55                         
    GRID    99900002        8290.   1821.13 2003.55                         
    GRID    99900003        8290.   1800.13 2003.55                         
    GRID    99900004        8288.   1750.   2003.55                        
    CROD     10000                                 
    GRID    99900005        8288.   1726.   2003.55                         
    GRID    99900006        8288.   1689.   2003.55                         
    GRID    99900007        8288.   1665.5  2003.55                         
    GRID    99900008        8288.   1642.   2003.55                         
    GRID    99900009        8288.   1617.9  2003.55                         
    GRID    99900010        8288.   1593.8  2003.55                         
    GRID    99900011        8288.   1569.7  2003.55                         
    GRID    99900012        8288.   1545.6  2003.55                         
    GRID    99900013        8288.   1521.5  2003.55                         
    GRID    99900014        8288.   1498.   2003.55                         
    GRID    99900015        8288.   1474.5  2003.55                         
    GRID    99900016        8288.   1437.5  2003.55                         
    GRID    99900017        8288.   1414.   2003.55                         
    GRID    99900018        8288.   1390.5  2003.55                         
    GRID    99900019        8288.   1369.4  2003.55                         
    GRID    99900020        8288.   1348.3  2003.55                         
    GRID    99900021        8288.   1327.2  2003.55                         
    GRID    99900022        8288.   1306.1  2003.55                         
    GRID    99900023        8288.   1285.   2003.55                         
    GRID    99900024        8288.   1261.5  2003.55                         
    GRID    99900025        8288.   1238.   2003.55                         
    GRID    99900026        8288.   1201.   2003.55                         
    GRID    99900027        8288.   1177.5  2003.55                         
    GRID    99900028        8288.   1154.   2003.55                         
    GRID    99900029        8288.   1131.42 2003.55                         
    GRID    99900030        8288.   1108.83 2003.55                         
    GRID    99900031        8288.   1086.25 2003.55                         
    GRID    99900032        8288.   1063.67 2003.55                         
    GRID    99900033        8288.   1041.08 2003.55                         
    GRID    99900034        8288.   1018.5  2003.55                         
    GRID    99900035        8288.   995.    2003.55                         
    GRID    99900036        8288.   971.5   2003.55                         
    GRID    99900037        8290.   934.5   2003.55                         
    GRID    99900038        8290.   903.017 2005.55                         
    GRID    99900039        8290.   881.443 2005.55                         
    GRID    99900040        8290.   859.869 2006.55                         
    GRID    99900041        8290.   838.295 2006.55                         
    GRID    99900042        8290.   816.722 2007.55
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    ########################################################################################
    """
                                DUPLICATE NODE FOR NASTRAN BULK v1.0
                                         ----------
                                      14 February 2016
    ****************************************************************************************
     
    [+] INPUT :
    - NODE_FILE      : File contains the original GRID card that the user wants duplicate.
     
    [+] OUTPUT :
    - DUPLICATE_NODE : Output file contains the duplicate GRID cards.
     
    [+] VARIBALE :
     
    - FORMAT : Format for the bulk file :
                                       - 8 for small format
                                       - 16 for large format
     
    - N_ID : New ID for the GRID card duplicate. The width of the N_ID can not be larger
           than the FORMAT chose. Must be an integer > 0.
     
    - STEP : Increments the next ID for the duplicate GRID card ID. Must be an integer > 0. 
     
    """
    ########################################################################################
     
    def Duplicate_Node(Bulk_Node, Bulk_Node_Duplicate):
     
        FORMAT = 8
        N_ID   = 99900000
        STEP   = 1
     
        for LINE in Bulk_Node :
     
            if LINE[:8].replace(" ","") == "GRID" :
     
                CARD = LINE[:9].replace(" ", "")
                ID   = LINE[9:16].replace(" ", "")
                CP   = LINE[16:24].replace(" ", "")
                X1   = LINE[24:32].replace(" ", "")
                X2   = LINE[32:40].replace(" ", "")
                X3   = LINE[40:48].replace(" ", "")
                CD   = LINE[48:56].replace(" ", "")
                PS   = LINE[56:64].replace(" ", "")
                SEID = LINE[64:72].replace(" ", "")
     
                CARD = CARD + (FORMAT - len(CARD))* " "
                ID   = ID   + (FORMAT - len(ID))  * " "
                CP   = CP   + (FORMAT - len(CP))  * " "
                X1   = X1   + (FORMAT - len(X1))  * " "
                X2   = X2   + (FORMAT - len(X2))  * " "
                X3   = X3   + (FORMAT - len(X3))  * " "
                CD   = CD   + (FORMAT - len(CD))  * " "
                PS   = PS   + (FORMAT - len(PS))  * " "
                SEID = SEID + (FORMAT - len(SEID))* " "
     
                Bulk_Node_Duplicate.write(CARD + str(N_ID) + CP + X1 + X2 + X3 + CD + PS + SEID + '\n')
     
                N_ID = N_ID + STEP
     
            else :
     
                Bulk_Node_Duplicate.write(LINE + '\n')
     
     
     
    NODE_FILE      = open("MPC_NODE.dat", "r")
    DUPLICATE_NODE = open("duplicate_node.dat", "w")
     
    Duplicate_Node(NODE_FILE,DUPLICATE_NODE)
     
    NODE_FILE.close()
    DUPLICATE_NODE.close()
    Qui peux m'expliquer pourquoi j'ai ces deux sauts de ligne ?

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    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 697
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Qui peux m'expliquer pourquoi j'ai ces deux sauts de ligne ?
    Lorsque vous lisez un fichier avec la construction "for LINE in fichier", çà retourne la ligne *et* la fin de ligne et le .write(LINE + '\n') contiendra 2 fins de lignes. Ceci dit, vous allez trop dans les détails.
    Si la ligne est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> s = 'GRID     86725          8290.   1863.13 2003.55\n'
    pas la peine de faire tous vos "replace":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s.split()
    ['GRID', '86725', '8290.', '1863.13', '2003.55']
    De plus, si vous voulez afficher une chaîne de x caractères en occupant une longueur fixe de n, vous avez des instructions de formatage for utiles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> '%8s' % '123'
    '     123'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé

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

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

    Tu ne dois pas rajouter de saut de ligne à cette ligne là il y est déjà.

    D'autre part ton code est infiniment trop compliqué pour ce que tu as à faire.

    Regarde ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> l = "GRID     86745          8288.   1348.3  2003.55 "
    >>> items = ['%-8s' % i for i in l.split(' ') if i]
    >>> items
    ['GRID    ', '86745   ', '8288.   ', '1348.3  ', '2003.55 ']
    >>> items[1] = N_ID  # Changer l'ID
    >>> line = ''.join(items) + '\n'   # Recréer la ligne

  4. #4
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Lorsque vous lisez un fichier avec la construction "for LINE in fichier", çà retourne la ligne *et* la fin de ligne et le .write(LINE + '\n') contiendra 2 fins de lignes. Ceci dit, vous allez trop dans les détails.
    Si la ligne est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> s = 'GRID     86725          8290.   1863.13 2003.55\n'
    pas la peine de faire tous vos "replace":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s.split()
    ['GRID', '86725', '8290.', '1863.13', '2003.55']
    De plus, si vous voulez afficher une chaîne de x caractères en occupant une longueur fixe de n, vous avez des instructions de formatage for utiles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> '%8s' % '123'
    '     123'
    >>>
    - W
    Merci pour ta réponse.

    En fait pour le formatage je sais qu'il est possible de mieux faire, mais pour l'instant je me concentre sur ce petit soucis que j'ai.
    De plus en utilisant votre méthode je ne pourrais pas faire évoluer mon script par la suite sur une utilisation plus poussée.

    De plus je ne suis pas sur que le "for LINE in fichier renvoie un saut de ligne car sinon j'aurai le problème sur les autres lignes également, pas uniquement sur ce cas particulier. En retirant le '\n' je perd mes sauts de lignes.

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Tu ne dois pas rajouter de saut de ligne à cette ligne là il y est déjà.

    D'autre part ton code est infiniment trop compliqué pour ce que tu as à faire.

    Regarde ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> l = "GRID     86745          8288.   1348.3  2003.55 "
    >>> items = ['%-8s' % i for i in l.split(' ') if i]
    >>> items
    ['GRID    ', '86745   ', '8288.   ', '1348.3  ', '2003.55 ']
    >>> items[1] = N_ID  # Changer l'ID
    >>> line = ''.join(items) + '\n'   # Recréer la ligne
    Salut, merci pour ta réponse.

    Mais comme dit plus haut je ne cherche pas vraiment à optimiser le code dans l'immédiat je cherche juste à ne pas avoir ces sauts de lignes. Je ne comprend pas de quel saut de ligne tu parles ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    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 697
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    De plus je ne suis pas sur que le "for LINE in fichier renvoie un saut de ligne car sinon j'aurai le problème sur les autres lignes également, pas uniquement sur ce cas particulier. En retirant le '\n' je perd mes sauts de lignes.
    Lancez la console Python et regardez ce que contient une ligne récupérée de cette façon là.

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

  7. #7
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Salut, merci pour ta réponse.

    Mais comme dit plus haut je ne cherche pas vraiment à optimiser le code dans l'immédiat je cherche juste à ne pas avoir ces sauts de lignes. Je ne comprend pas de quel saut de ligne tu parles ?
    Dans la console le résultat est le même. Je ne comprend où j'ai mis un saut de ligne de trop. J'ai testé en les retirant et un les inversant ça ne résoud pas mon problème.

    Lorsque je ne met pas de '\n' je n'ai aucun saut de ligne mais lorsque que je le met j'en ai deux pour le cas précisé plus haut.

    Help me please

  8. #8
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Comme on te l'a expliqué précédemment, lorsque tu recrées ta ligne il est normal d'ajouter le retour.

    Ceci est OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Bulk_Node_Duplicate.write(CARD + str(N_ID) + CP + X1 + X2 + X3 + CD + PS + SEID + '\n')
    mais lorsque tu réécris la même ligne, le retour ligne y est déjà. Tu ne dois pas en rajouter un.
    Donc juste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Bulk_Node_Duplicate.write(LINE)

  9. #9
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Une question hors sujet au passage : comment fais-tu pour récupérer des fichiers grib sous forme de données ? Ce sont des fichiers .txt, .dat ?
    Si tu as un site ou télécharger cela, je suis intéressé. De mon côté, je n'ai que des fichiers .grb ou .bz2.

  10. #10
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Comme on te l'a expliqué précédemment, lorsque tu recrées ta ligne il est normal d'ajouter le retour.

    Ceci est OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Bulk_Node_Duplicate.write(CARD + str(N_ID) + CP + X1 + X2 + X3 + CD + PS + SEID + '\n')
    mais lorsque tu réécris la même ligne, le retour ligne y est déjà. Tu ne dois pas en rajouter un.
    Donc juste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Bulk_Node_Duplicate.write(LINE)
    Merci VinsS pour ta réponse.

    Cependant le résultat que je souhaite ne colle toujours pas. Je n'ai plus le saut de ligne juste après mais je l'ai toujours juste avant.

    Au final j'obtient ceci :

    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
     
    GRID    99900000        8290.   1863.13 2003.55                         
    GRID    99900001        8290.   1842.13 2003.55                         
    GRID    99900002        8290.   1821.13 2003.55                         
    GRID    99900003        8290.   1800.13 2003.55                         
    GRID    99900004        8288.   1750.   2003.55
     
    CROD     10000                                 
    GRID    99900005        8288.   1726.   2003.55                         
    GRID    99900006        8288.   1689.   2003.55                         
    GRID    99900007        8288.   1665.5  2003.55                         
    GRID    99900008        8288.   1642.   2003.55                         
    GRID    99900009        8288.   1617.9  2003.55                         
    GRID    99900010        8288.   1593.8  2003.55                         
    GRID    99900011        8288.   1569.7  2003.55
    Il faudrait que le saut de ligne à la ligne 7 ne se fasse pas.

    au final je souhaite ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    GRID    99900000        8290.   1863.13 2003.55                         
    GRID    99900001        8290.   1842.13 2003.55                         
    GRID    99900002        8290.   1821.13 2003.55                         
    GRID    99900003        8290.   1800.13 2003.55                         
    GRID    99900004        8288.   1750.   2003.55                        
    CROD     10000                                 
    GRID    99900005        8288.   1726.   2003.55                         
    GRID    99900006        8288.   1689.   2003.55                         
    GRID    99900007        8288.   1665.5  2003.55                         
    GRID    99900008        8288.   1642.   2003.55                         
    GRID    99900009        8288.   1617.9  2003.55                         
    GRID    99900010        8288.   1593.8  2003.55                         
    GRID    99900011        8288.   1569.7  2003.55

  11. #11
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Une question hors sujet au passage : comment fais-tu pour récupérer des fichiers grib sous forme de données ? Ce sont des fichiers .txt, .dat ?
    Si tu as un site ou télécharger cela, je suis intéressé. De mon côté, je n'ai que des fichiers .grb ou .bz2.
    Salut marco056,

    Je ne comprend pas ta question. Les fichiers que j'utilise sont des fichiers de donnés pour des calculs par éléments finis utilisés sous le logiciel Patran.
    Ces fichiers sont générés par Patran en format texte (l'extension importe peu : .dat, .bdf, etc ....).

    Que veux tu savoir exactement ?

    Cordialement

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    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 697
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Cependant le résultat que je souhaite ne colle toujours pas. Je n'ai plus le saut de ligne juste après mais je l'ai toujours juste avant.
    Ça c'est le résultat du découpage au burin de vos lignes.
    Ca fonctionne lorsque les lignes qui commencent par GRID ont le même format.
    Mais regardez un peu mieux le contenu de votre fichier: la ligne précédant "CROD" n'a pas le même format... et vous récupérez une fin de ligne dans X3 .

    Ce que je vous racontais précédemment n'était pas de l'optimisation: juste une méthode pour éviter de se prendre les pieds dans le nombre de caractères d'espacement présents ou pas entre les différents champs, la fin de ligne,...

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

  13. #13
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Il faudra montrer la fonction que tu utilises réellement pour écrire le fichier parce que le code que tu montre plus haut ne correspond pas.

    Tu devrais avoir une IndexError.

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    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 697
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Il faudra montrer la fonction que tu utilises réellement pour écrire le fichier parce que le code que tu montre plus haut ne correspond pas.

    Tu devrais avoir une IndexError.
    non, car ce sont des slices:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> line = '123456'
    >>> line[10:20]
    ''
    >>>
    et la documentation dit:
    4. The slice of s from i to j is defined as the sequence of items with index k such that i <= k < j. If i or j is greater than len(s), use len(s). If i is omitted or None, use 0. If j is omitted or None, use len(s). If i is greater than or equal to j, the slice is empty.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Ah oui, j'oublie cette particularité des slices.

    Me suis fait slicé.

  16. #16
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ça c'est le résultat du découpage au burin de vos lignes.
    Ca fonctionne lorsque les lignes qui commencent par GRID ont le même format.
    Mais regardez un peu mieux le contenu de votre fichier: la ligne précédant "CROD" n'a pas le même format... et vous récupérez une fin de ligne dans X3 .

    Ce que je vous racontais précédemment n'était pas de l'optimisation: juste une méthode pour éviter de se prendre les pieds dans le nombre de caractères d'espacement présents ou pas entre les différents champs, la fin de ligne,...

    - W
    Ok je comprend mieux.

    Sous Notepad j'ai affiché tout les caractères sur le fichier input et effectivement la fin de ligne n'avait pas le même format pour les lignes 5 et 6. Les caractères LF (Line Feed où Retour Ligne) n'était pas positionné au même endroit. Du coup j'ai arrangé le format et maintenant le code fonctionne.

    Mais j'avais pourtant anticipé ce soucis, enfin je pensais l'avoir anticipé !!!! et c'est pour cette raison que j'ai dés le départ retiré l'ensemble des espaces pour les lignes commençants par GRID et ensuite j'ai redécoupé avec le bon nombre d'espace entre chaque champs afin d'éviter tout problèmes de ré-écriture.

    Lorsque le code tombe sur une ligne qui ne commence pas par GRID il ne découpe rien et laisse la ligne telle quelle. Du coup je comprend pas ce qui ne va pas dans mon découpage.

    Mais merci pour tes indications wiztricks elles me permettent d'avancer.

  17. #17
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    la ligne précédant "CROD" n'a pas le même format... et vous récupérez une fin de ligne dans X3
    ça semble assez clair, d'où le saut de ligne "au dessus"
    et le saut de ligne "au dessous" quant à lui était dû au Bulk_Node_Duplicate.write(LINE + '\n') comme l'a indiqué VinsS

    ce qu'on peut remarquer aussi, c'est que toutes les lignes ne contiennent pas 5 champs distincts, beaucoup en contiennent seulement 4, ça vient du fait que selon la ligne le champs X1 (ou X2 je sais plus) est simplement une suite d'espaces
    pour le (re)dire simplement; découper par colonnes n'est pas une bonne idée

  18. #18
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    ça semble assez clair, d'où le saut de ligne "au dessus"
    et le saut de ligne "au dessous" quant à lui était dû au Bulk_Node_Duplicate.write(LINE + '\n') comme l'a indiqué VinsS

    ce qu'on peut remarquer aussi, c'est que toutes les lignes ne contiennent pas 5 champs distincts, beaucoup en contiennent seulement 4, ça vient du fait que selon la ligne le champs X1 (ou X2 je sais plus) est simplement une suite d'espaces
    pour le (re)dire simplement; découper par colonnes n'est pas une bonne idée
    Merci pour ta remarque.

    En fait je découpe par colonne uniquement les lignes commençant par GRID, les autres lignes restent inchangées, du coup pas besoin de se préoccuper des champs pour les lignes ne commençant pas par GRID, il faut juste les ré-écrire telle quelle.

  19. #19
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    De plus, si vous voulez afficher une chaîne de x caractères en occupant une longueur fixe de n, vous avez des instructions de formatage for utiles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> '%8s' % '123'
    '     123'
    >>>
    - W
    Alors j'ai essayé d'utiliser le formatage préconisé par wiztricks dites moi ce que vous en pensez et est ce que c'est bien écrit ?

    En fait si j'ai utilisé les formules "bourins" dans mon code de départ c'est parce qu'il faut respecter 8 caractères maximum dans un champ.

    Si vous prenez l'exemple de GRID, à lui tout seul il fait 4 caractères du coup le nombre d'espace que je dois ajouter c'est 4 afin de respecter les 8 caractères max et ainsi pouvoir écrire dans le champ suivant.

    Vous comprenez assez simplement que suivant le champs le nombre d'espace à ajouter est différent du coup je dois les calculer à chaque fois que je veux ré-écrire un champs.

    bon voilà mon code fonctionnel avec la petite touche de wiztricks sur le formatage des chaînes

    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
     
    def Duplicate_Node(Bulk_Node, Bulk_Node_Duplicate):
     
        FORMAT = 8
        N_ID   = 99900000
        STEP   = 1
        i      = 0
     
        for LINE in Bulk_Node :
     
            if LINE[:8] == "GRID" :
     
                LINE = LINE.split()
     
                for FIELD in LINE :
     
                    CARD = '%-(FORMAT-len(LINE[0]))s' % LINE[0]
                    ID   = '%-(FORMAT-len(LINE[1]))s' % LINE[1]
                    CP   = '%-(FORMAT-len(LINE[2]))s' % LINE[2]
                    X1   = '%-(FORMAT-len(LINE[3]))s' % LINE[3]
                    X2   = '%-(FORMAT-len(LINE[4]))s' % LINE[4]
                    X3   = '%-(FORMAT-len(LINE[5]))s' % LINE[5]
                    CD   = '%-(FORMAT-len(LINE[6]))s' % LINE[6]
                    PS   = '%-(FORMAT-len(LINE[7]))s' % LINE[7]
                    SEID = '%-(FORMAT-len(LINE[8]))s' % LINE[8]
     
                    Bulk_Node_Duplicate.write(CARD + str(N_ID) + CP + X1 + X2 + X3 + CD + PS + SEID + '\n')
     
                    N_ID = N_ID + STEP
     
            else :
     
                Bulk_Node_Duplicate.write(LINE)
     
     
     
    NODE_FILE      = open("MPC_NODE.dat", "r")
    DUPLICATE_NODE = open("duplicate_node.dat", "w")
     
    Duplicate_Node(NODE_FILE,DUPLICATE_NODE)
     
    NODE_FILE.close()
    DUPLICATE_NODE.close()

  20. #20
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    En fait je découpe par colonne uniquement les lignes commençant par GRID, les autres lignes restent inchangées, du coup pas besoin de se préoccuper des champs pour les lignes ne commençant pas par GRID, il faut juste les ré-écrire telle quelle.
    d'accord.

    voici les 8 premières lignes du fichier MPC_NODE.dat que tu as fourni plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       CARD      ID     CP      X1      X2      X3      CD      PS     SEID
      --------_______--------________--------________--------________--------
    1 'GRID     86725          8290.   1863.13 2003.55                                 \n'
    2 'GRID     86726          8290.   1842.13 2003.55                                 \n'
    3 'GRID     86727          8290.   1821.13 2003.55                                 \n'
    4 'GRID     86728          8290.   1800.13 2003.55                                 \n'
    5 'GRID     86729          8288.   1750.   2003.55\n'
    6 'CROD     10000                                 \n'
    7 'GRID     86730          8288.   1726.   2003.55                                 \n'
    8 'GRID     86731          8288.   1689.   2003.55                                 \n'
      --------_______--------________--------________--------________--------
       CARD      ID     CP      X1      X2      X3      CD      PS     SEID
    la ligne 5 (celle qui précède la ligne commençant par "CROD") fait 48 caractères de long, en conséquence le saut de ligne se trouve sur le 48ème caractère, et se retrouve inclu dans le champs CD, alors que les autres lignes commençant par "GRID" ne prennent jamais en compte le saut de ligne à cause des nombreux espaces en fin de ligne
    c'est peut-être plus clair ainsi ?

    il est assez évident (?) que la bonne solution ne consiste pas à rajouter des espaces à la fin de la ligne 5, la preuve, c'est difficile de s'en rendre compte
    pour le redire simplement; découper par colonnes n'est pas une bonne idée, le découpage par colonnes comme tu le fais donne à l'espace une importance qu'il ne devrait pas avoir.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème saut de ligne dans mes champs
    Par xess91 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2010, 16h59
  2. Problème saut de lignes !
    Par lami_dta_femme dans le forum Mise en page CSS
    Réponses: 17
    Dernier message: 30/04/2008, 00h05
  3. [VBA] Import Excel: problème saut de ligne
    Par davasm dans le forum Général VBA
    Réponses: 2
    Dernier message: 30/11/2007, 09h05
  4. [Tableaux] Problème saut de ligne
    Par @lexx dans le forum Langage
    Réponses: 14
    Dernier message: 26/03/2006, 15h20
  5. Problème saut de ligne dans un tableau
    Par talggir dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2005, 15h10

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