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

C Discussion :

Regex et extraction d'une sous-chaine


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Regex et extraction d'une sous-chaine
    Bonjour,

    Pour le contexte, je bosse sous LabWindows, je communique avec une machine via gpib pour faire de l'acquisition de données, en l'occurrence, je souhaite récupérer régulièrement (via timer) une température (ordonnée) et un temps (abscisse) pour construire un graphique. Pour la température tout va bien j'arrive à extraire la donnée et à la stocker.
    Pour le temps ça se complique car le format de réponse de la machine est le suivant : nombre, nombre, nombre.nombre, nombre:nombre, nombre
    exemple : 1, 2, 27.0, 1:30, 5
    Dans cet exemple je dois donc extraire les nombres avant et après le ":", ici le 1 et le 30. Mais ce temps est un temps restant or je veux un instant je fais donc un calcul après du genre : instant de la mesure = temps total - temps restant

    Voici ce que j'ai codé :

    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
    int CVICALLBACK TimerCB (int panel, int control, int event,
    		void *callbackData, int eventData1, int eventData2)
    {
    	char moni_com[100];
    	char moni_resp[50];
    	char trash[10], trash2[20]; //tableaux poubelle 
     
    	switch (event)
    	{
    		case EVENT_TIMER_TICK:
     
    			sprintf(moni_com, "PRGM MON?");
     
    			ibwrt(BoardDevice, moni_com, strlen(moni_com)); //j'envoie la commande contenue dans moni_com à la machine
     
    			ibrd(BoardDevice, moni_resp, 100); //je réceptionne la réponse dans moni_resp.
     
    			sscanf(moni_resp, "%*[^,]%*c%[^,]%*c%[^,]%*c%[^:]%*c%[^,]",trash, trash2, hr, m); //hr et m ont été initialisé en global char hr[4] et char m[3];
     
    			x_oven = (min + 60*h) - (60*atoi(hr) + atoi(m));//temps à l'instant x = temps total - temps restant ; min et h sont déterminés en dehors de cette fonction.	
     
    			PlotPoint(panel3, PANEL3_GRAPH, (double)x_oven, (double)t_oven, VAL_SIMPLE_DOT, VAL_BLACK); //j'ai enlevé tout le code pour t_oven car pas utile
    			//j'ai pris la minute pour unité dans mon graphique dans la réalité mais pour les tests j'ai réglé le timer sur la seconde pour pas attendre 1 minute à chaque fois ^^"
    			break;
    	}
    	return 0;
    }
    En gros toutes les secondes, je dessine un point sur un graphique avec en ordonnée t_oven et en abscisse x_oven, le soucis ici c'est que x_oven est toujours égal à 0. j'ai essayé énormément de chose, changer les types des variables, changer le formattage du sscanf, utiliser d'autres fonctions que atoi etc... pour tester mais bon... les résultats sont parfois surprenants !

    Bref, je galère depuis ce matin là dessus, j'ai l'impression que plus je cherche une solution, plus je me complique la vie et plus je m'éloigne.. j'ai regarder ce lien : http://nicolasj.developpez.com/articles/regex/#LIV-B

    Vu que la réponse de la machine aura toujours ce format je me suis dis qu'un regex serait la bonne solution et résoudrait simplement mon problème mais je trouve le code du lien très compliqué, je ne vois pas du tout comment construire mon regex et utiliser les fonctions associées..

    Auriez-vous une solution simple à me proposer ?

    Merci d'avoir lu le texte jusque ici, j'ai tendance à trop blablater sur les détails ^^"

    Edit : Ha, bah les regex n'ont pas l'air utilisables sous LabWindows il ne trouve pas regex.h..

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Points : 608
    Points
    608
    Par défaut
    Il existe plusieurs bibliothèques permettant de réaliser des expressions régulières, celle que tu mentionnes n'en est qu'une en particulier. Elle fait partie du projet GNU (probablement GPL donc).

    Jètes un oeil à http://www.boost.org/doc/libs/1_53_0...tml/index.html peut-être...

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

Discussions similaires

  1. Extraction d'une sous-chaine de caractère
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 22/04/2008, 08h13
  2. [Bash] : extraction d'une sous chaine
    Par julio_097 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/08/2007, 19h33
  3. Extraction d'une sous-chaine à partir d'une chaine principale
    Par gazere dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/06/2007, 04h08
  4. Extraction d'une sous-chaine
    Par adurand dans le forum Linux
    Réponses: 2
    Dernier message: 17/03/2007, 17h35
  5. [RegEx] extraction d'une sous chaine
    Par zulkifli dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 13h27

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