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 :

Arrêter un programme à partir d'un numéro d'élément d'une chaine


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Arrêter un programme à partir d'un numéro d'élément d'une chaine
    Je veux créer un programme qui lise un type de fichier, donc cette partie c'est bon. Par contre je souhaiterai qu'il m'affiche un messagebox au mon d'un certain nombre de caractère. Mon fichier en question ne possède qu'une ligne ! et 7 éléments.

    Le problème est que je ne trouve pas comment arrêter et afficher de message après la lecture de la première ligne ou du 8ème élément. Vous auriez une idée ?

    Merci


    Voici mon programme :

    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
    import math, codecs
    from qgis.core import *
    ..................
     
     
    def Message(texte) :
        QMessageBox.information(None,"Message",texte) 
     
    #Pour un Fichier gxt 
    # 1--> initialisation de la chaine --> variable globale
    # 2--> definition de l'intervalle de definition de la chaine de caractere 
     
    if not os.path.isfile(fichiergeoref_gxt):
        Message("Fichier inexistant")
     
    else:
        scrFile=open(fichiergeoref_gxt,'r')
        lgr_ch = len(fichiergeoref_gxt)
        x=0
        y=0
    # 4--> Lecture iterative --> lecture par tabulation
        for line in scrFile :
            case_coord = (line.split('\t'))
            x = case_coord [5]
            y = case_coord [6]
     
        scrFile.close()
    -------------------------------------------------------------------------
    ----> mon problème est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if case_coord > case_coord[7] :
    if x is None or y is None:
            Message("Ce n'est pas un fichier GXT")
    -------------------------------------------------------------------------         
    
    else:
        
        jeu_coord = "( " + str(x) +" ; " + str(y) + " )"
        jeu_coord = " Les coordonnees sont : " + jeu_coord 
        Message("Il s'agit d'un fichier GXT, ") 
        Message(jeu_coord)

  2. #2
    Membre régulier
    Profil pro
    Développeur Back-End
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 106
    Points
    106
    Par défaut
    Salut,

    Tu peux utiliser le module 'sys'
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import sys
    sys.exit(1)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Salut !

    Ok, j'ai essayer avec exit mais autre chose.
    En fait je veux pas sortir du programme, je voudrais afficher un message à la fin de la lecture du fichier. J'ai du mal à formuler le soucis.
    En fait c'est un problème d'écriture.

    Dans ce passage là, je lis les 6 et 7ème élément de mon fichier.
    for line in scrFile :
    case_coord = (line.split('\t'))
    x = case_coord [5]
    y = case_coord [6]

    if case_coord > case_coord[7] : (ligne fausse) ---> c'est cette ligne que j'arrive pas formuler
    Message("Ce n'est pas un fichier GXT")

    je voudrais lui dire quand tu arrive au 7ème élément ( il n'y en pas) arrête le programme et affiche la " Ce n'est pas un fichier ..."

    Si tu vois le truc ?

  4. #4
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Plutôt que mettre none, tu peux mettre False vu que 0 est égal à False, sauf si je dis une bêtise et que j'ai pas compris ton code !
    et Sauf si la valeur peut être différente de 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if x is not True or y is not True:
        Message("Ce n'est pas un fichier GXT")
    Edit: Ton Error vient surement du fait que ton élément 7 n'existe peut-être pas ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Oui c'est ça mon 7ème élément existe pas. Ca risquait pas de marcher.
    Par contre je viens d'essayer ta solution (qui me paraissait très bien) mais ça marche pas non plus.. Je comprends rien à l'algo..
    Si ça peut aider, le contenu de mon fichier.gxt c'est (juste) ça :

    1 Raster Raster 23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72 0 582500.000000 6572500.000000

    J'arrive à afficher les x, y (5825..., 657...)
    mais dans mon programme en fait, je voudrais que lorsque l'on essaye d'ouvrir un autre fichier, il affiche un message comme quoi c'est pas un gxt.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par pierot411 Voir le message
    1 Raster Raster 23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72 0 582500.000000 6572500.000000

    J'arrive à afficher les x, y (5825..., 657...)
    mais dans mon programme en fait, je voudrais que lorsque l'on essaye d'ouvrir un autre fichier, il affiche un message comme quoi c'est pas un gxt.
    Techniquement, dire "lorsque l'on essaye d'ouvrir un autre fichier" suggère que la chaine de caractère qu'il contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1	Raster	Raster	23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72	0	582500.000000	6572500.000000
    est une constante dont on extrait x et y.
    Autant écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = 582500.000000
    y = 6572500.000000
    J'imagine que ce n'est probablement pas ce que vous voulez....
    Mais si vous n'êtes pas plus précis, çà va pas être simple d'exprimer la chose "programmatiquement".
    Et comme on ne sait pas trop lire ce qui se passe dans votre tête...

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    C'est ça :" la chaîne de caractère qu'il contient".
    Je voudrais que mon programme face le distinguo entre un fichier qui contienne :

    I) 1er cas de figure :

    Raster Raster 23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72 0 582500.000000 6572500.000000

    et un fichier contienne :

    II) 2ème cas de figure :

    Raster Raster 23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72 0 582500.000000 6572500.000000 12

    soit plus de 6 éléments

    ou :

    Nom de l'image : 23-2014-0580-6575-LA93.ecw
    X minimum : 580000.0000
    X maximum : 585000.0000
    Y minimum : 6570000.0000
    Y maximum : 6575000.0000

    soit plus d'une ligne.


    Je souhaiterai que dans le deuxième cas de figure mon programme me dise que ce n'est pas le fichier attendu.
    C'est plus clair pour vous ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par pierot411 Voir le message
    Je souhaiterai que dans le deuxième cas de figure mon programme me dise que ce n'est pas le fichier attendu.
    C'est plus clair pour vous ?
    Si vous pouvez vous contenter de tester la longueur de la liste construite via .split, je ne vois pas le soucis d'autant que vous êtes bien obligé de vous assurer que cette liste a (au moins) 6 éléments avant d'en extraire x et y.

    Mais si vous voulez être sur que c'est une bonne ligne, vous deviez factorisez sa forme donnée par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Raster Raster 23-2014-0580-6575-LA93.ecw@1417.322835@1417.322835@72@72 0 582500.000000 6572500.000000
    en expression régulière et vérifier que la ligne correspond avant d'en sortir les x et y.

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

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    "Si vous pouvez vous contenter de tester la longueur de la liste"


    scrFile=open(fichiergeoref_gxt,'r')
    lgr_ch = len(fichiergeoref_gxt)

    x=0
    y=0
    compteur = 0

    for line in scrFile :
    case_coord = (line.split('\t'))
    x = case_coord [5]
    y = case_coord [6]
    compteur += 1

    Effectivement quand je fais : print(len(case_coord)), j'ai : 7 éléments. En tant que débutant je n'avais pas compris que le programme lisait d'abord le fichier, puis les x et y.

    Du coup je ne comprends pas pourquoi la ligne qui suit ne fonctionne pas.
    if len(case_coord)>[7]:

    Message("Ce n'est pas un fichier GXT")


    Je n'ai pas compris l'idée de la factorisation.

    Mais cela ne revient pas au même lorsque je fait :

    compteur = 0
    .
    .
    compteur +=1

  10. #10
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    J'ai beaucoup de mal à voir où se trouve le problème.

    Ce ne serait pas bêtement ceci que tu veux:
    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
     
    with open(filename, 'r') as inf:
        line = inf.readline()
     
    if not line.strip():
        erreur ligne vide >> message
     
    items = line.split(' ')
    if len(items) != 6:
        erreur ligne incorrecte >> message
     
    elif items[0:2] != ["Raster", "Raster"]
        erreur fichier incorrect >> message
     
    else:
        OK c'est bon
    non ?

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Je crois pas que ça soit non plus mais merci pour l'idée.
    J'ai exemple qui marche ici :

    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
    def Message(texte) :
        QMessageBox.information(None,"Message",texte) 
     
    # Pour un fichier grf :
    if not os.path.isfile(fichiergeoref_grf):
        Message("Fichier inexistant")
     
    # Lecture du fichier et obtention des x et y 
    else:
        srcFile = open(fichiergeoref_grf,'r')
        compteur = 0    
        for line in srcFile:
            if line.find("X minimum") >=0:
                x = float(line.split(' ')[3])
                compteur = compteur+1
            if line.find("Y maximum") >=0:
                y = float(line.split(' ')[3])
                compteur = compteur+1
                print(x,y)
     
        srcFile.close()
     
    #    Grâce à cette ligne je peux afficher ce message  --> c'est cette ligne que je voudrais créer dans mon autre programme
    if (compteur != 2):
        Message("Ce n'est pas un fichier GRF")
     
    # Si c'est bien un fichier.grf les coordonnées x,y s'affiche:
    else:

    Pour récapituler :

    1) ouverture du fichier ---> Fonctionne
    2) lecture du fichier ---> Fonctionne
    3) obtention des x et y ---> Fonctionne
    4) Fermeture du fichier
    5) Condition : dans ce cas là : if (compteur != 2):
    Message : "pas le fichier attendu.." -------> je voudrais ce genre de condition dans mon autre programme

    J'espère que c'est un peu plus clair... ?

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par pierot411 Voir le message
    5) Condition : dans ce cas là : if (compteur != 2):
    Message : "pas le fichier attendu.." -------> je voudrais ce genre de condition dans mon autre programme

    J'espère que c'est un peu plus clair... ?
    Les données ne sont pas structurées de la même façon.
    Essayez de lire votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        srcFile = open(fichiergeoref_grf,'r')
        compteur = 0    
        for line in srcFile:
            if line.find("X minimum") >=0:
                x = float(line.split(' ')[3])
                compteur = compteur+1
            if line.find("Y maximum") >=0:
                y = float(line.split(' ')[3])
                compteur = compteur+1
                print(x,y)
    Que se passe-t-il si deux lignes ont "X minimum" et que vous ne rencontrez jamais "Y maximum"?
    Il eut été moins faux d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        srcFile = open(fichiergeoref_grf,'r')
        x = y = None
        for line in srcFile:
            if line.find("X minimum") >=0:
                x = float(line.split(' ')[3])
            if line.find("Y maximum") >=0:
                y = float(line.split(' ')[3])
                print(x,y)
    if x is not None and y is not None:
         ....
    çà assure au moins que les variables x et y ont été lues au moins une fois.

    Ceci dit, je ne vois pas trop ce que vous voulez compter dans l'autre cas: il n'y a qu'une seule ligne (qu'on peut découper en liste de 6 éléments, les deux derniers ressemblant à des floats)

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

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse. Effectivement par rapport au code (fichier grf), c'est bien plus propre et ça marche tout aussi bien.

Discussions similaires

  1. Programme pour renommer cellule à partir d'un numéro d'onglet
    Par priscilla79 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/05/2009, 16h24
  2. Trouver le jour de l'année à partir de son numéro
    Par Nounours666 dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/01/2006, 13h20
  3. compilation d'un programme à partir d'un autre programme??
    Par Naruseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/08/2005, 15h05
  4. Réponses: 2
    Dernier message: 04/06/2004, 10h36

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