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 lecture details


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut Problème lecture details
    Bonjour,
    Je suis en train de programmer l'automatisation d'un oscilloscope.
    Et pour faire simple il y a plusieurs paramétrages et j'aimerais que quand j'ouvre le fichier que je puisse lire chacun d'entre eux un a un pour y attribuer une fonction. Le problème c'est que je ne sais pas trop comment m'y prendre.

    Je mets en PJ le fichier que je dois traiter.

    J'avais trouver une solution qui correspondait pour par exemple les lignes de measurement ":MEASUREMENT:MEAS1:TYPE MEAN"
    voici le morceau de code y correspondant:

    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
    f = open('TEST2.txt')
    #http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
     
    print(f)
    data=f.readlines()
    print(data)
    print(data[0])
    listedata=data[0].split(';')   #coupe la grande chaine en plusieurs éléments séparés par ';'
    for l in listedata:  
      ll=l.split(' ')  #coupe chaque petite  chaine en plusieurs éléments séparés par ' '
      #print(ll[0])
      if ll[0]==":MEASUREMENT:MEAS1:TYPE":
          print("TROUVE: "+ ll[1])
          if ll[1]=="MEAN":
            print("il faut faire le réglage MEAN")
    f.close()
    Mais le problème se rencontre avec des sous menus. Par exemple ":DATA:ENCDG SRIBINARY;DESTINATION REFA;SOURCE CH1;START 1;STOP 2500;WIDTH 1;"
    Ici ENCDG DESTINATION SOURCE START STOP WIDTH sont toutes sous menu de DATA mais DATA n'est pas récrit a chaque fois, comment faire?

    Mais pour les sous menu par exemple je ne comprends pas trop comment je peux faire.

    Dites moi si le message n'est pas claire. Merci à vous pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour,

    Pas sûr d'avoir tout compris, et tes lignes sont mal représentées sur le forum...

    Pour ton problème de sous menu, je mettrai une ligne sans, une ligne avec, et j'essaierai de déterminer ce qui permettra de les distinguer.

    Après avec une fonction qui retourne un booléen pour savoir si avec ou sans sous-menu, on itère sur les lignes du fichier.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Le fichier texte que j'ai mis en PJ ne peux pas être changer c'est un fichier qui se génère automatiquement de l'oscilloscope.
    En fait, c'est une copie de la configuration complete. Ce que je dois faire c'est crée un script python qui va lire ce fichier, lire tout les parametre et apres moi plus tard je devrais y associé une action. Par exemple la ligne mesurement meas1 que j'ai mise nous indique qu'il s'agit d'une mesure de moyenne. Toutes les configuration sont séparé par des ";" mais pas celles avec des sous menu comme je l'ai dis pour ":DATA:ENCDG SRIBINARY;DESTINATION REFA;SOURCE CH1;START 1;STOP 2500;WIDTH 1;" il y a 6 sous menus. Et je ne sais pas comment rédiger cette particularite. Le code que j'avais transmis au dessus fonctionne pour mesurements mais pas pour data et d'autres. Je ne sais pas si c'est plus claire comme ça.
    Merci à vous pour vos réponses

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Voilà une proposition pour séparer menus et valeur,

    En espérant que c'est ce qui est attendu

    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
    def get_menu(line):    
        if not line.startswith(':') and line.count(':') == 0:
            menu, value = line.split()
        else:
            menu = []
            for m in line.split(':'):
                if m:
                    menu.append(m)
            menu[-1], value = menu[-1].split()
        return menu, value
     
     
    with open("TEST2.txt") as f:
        for line in f.read().split(';'):
            menu, value = get_menu(line)
            print(f"menu: {repr(menu)} et valeur: {value}")
    On peut simplifier get_menu par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def get_menu(line):    
        if not line.startswith(':') and line.count(':') == 0:
            menu, value = line.split()
        else:
            menu = [m for m in line.split(':') if m]
            menu[-1], value = menu[-1].split()
     
        return menu, value

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Ce n'est pas ça le problème
    En fait, le fichier que j'ai envoyer représentre les parametrages d'un oscilloscope. Par exemple si on prend ":HEADER 0;:VERBOSE 1;:DATA:ENCDG SRIBINARY;DESTINATION REFA;SOURCE CH1;START 1;STOP 2500;WIDTH 1;" cela veut dire que le hearder est a 0 verbose a 1 que le DATA:ENCDG est en SRIBINARY que DATA:DESTINATION est en REFA, que DATA:SOURCE c'est CH1 que DATA:STAR est à 1 etc... Et tout le reste rédiger de la même facon. Et ce que je cherche à faire est de lire la réponse pour chacun des paramétrage. Comme je l'ai dis précédemment, pour ":MEASUREMENT:MEAS1:TYPE MEAN" je peux utiliser le code que j'ai poster au dessus mais je ne sais pas comment procéder avec les fonction comme pour le DATA: ou il n'est pas répéter à chaque fois est n'est pas entre ":".
    Merci beaucoup quand même pour vos réponses.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonjour,

    As-tu testé mon code ?

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 717
    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 717
    Par défaut
    Salut,
    Citation Envoyé par heh__ Voir le message
    Ce n'est pas ça le problème
    Certes mais le problème est dans la séparation de vos données en "unités d'information" cohérentes et dans l'identification des différents champs dans ces unités d'information.

    Et çà, c'est un travail de conception à faire avant de partir à coder qu'on ne fera pas pour vous (ne serait ce que parce qu'on n'a pas la documentation de l'oscillo.)

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

  8. #8
    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
    salut,

    Citation Envoyé par heh__ Voir le message
    le problème se rencontre avec des sous menus. Par exemple "ATA:ENCDG SRIBINARY;DESTINATION REFA;SOURCE CH1;START 1;STOP 2500;WIDTH 1;"
    Ici ENCDG DESTINATION SOURCE START STOP WIDTH sont toutes sous menu de DATA mais DATA n'est pas récrit a chaque fois, comment faire?
    tu peux tenir à jour l'état d'une variable, quand tu vois passer une ligne DATA tu mets à jour une variable inside_data_menu en lui affectant True au lieu de False par exemple.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 717
    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 717
    Par défaut
    Salut,

    Citation Envoyé par heh__ Voir le message
    Mais pour les sous menu par exemple je ne comprends pas trop comment je peux faire.
    Déjà il faut avoir une idée de la syntaxe utilisée pour présenter ces données.
    Ce que vous pourriez déjà remarquer, c'est que vous avez une liste d'unités d'informations séparées par ';:':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> data = open('test.txt').read(300)
    >>> data = data.replace(';:', ';\n:')
    >>> print(data)
    :HEADER 0;
    :VERBOSE 1;
    :DATA:ENCDG SRIBINARY;DESTINATION REFA;SOURCE CH1;START 1;STOP 2500;WIDTH 1;
    :LOCK NONE;
    :DISPLAY:FORMAT YT;STYLE VECTORS;PERSISTENCE 0;CONTRAST 63;INVERT OFF;
    :ACQUIRE:MODE SAMPLE;NUMAVG 16;STATE 1;STOPAFTER RUNSTOP;
    :CH1:PROBE 1.0E1;CURRENTPROBE 1.0E2;SCALE 5.0E0;POSITION 0.0E0;CO
    >>>
    où il y a une entité au début enveloppée par les ':' suivie par attributs/valeurs séparés par des ';'
    Il y a aussi des cas (lignes 1, 2, 4) où le label est suivi d'un espace puis d'une valeur avant que la ligne se termine.

    Citation Envoyé par heh__ Voir le message
    Ici ENCDG DESTINATION SOURCE START STOP WIDTH sont toutes sous menu de DATA mais DATA n'est pas récrit a chaque fois, comment faire?
    Si mon décodage de vos données est "pertinent", vous voyez que la ligne qui commence par :DATA: contient tous ces labels et forment ce que j'appelle attributs/valeurs associés.... Et donc "comment faire" ne commence pas par écrire du code mais par étudier vos données pour savoir comment les découper, les regrouper,....

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  2. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11
  3. [communication série] problème lecture/écriture
    Par davinout dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 01/06/2005, 13h14
  4. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36
  5. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48

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