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

WinDev Discussion :

extraire les infos d'une chaine de caracteres


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut extraire les infos d'une chaine de caracteres
    Bonjour,

    j'ai la chaine de caracteres suivante:
    {ZESTRIL {20 mg} cp grid:1:0:0:0 {} {} Ald {}}

    qui contient
    1- le nom du medicament (ZESTRIL)
    2- le dosage(20 mg)
    3- la forme(cp pour comprimé)
    4- la posologie(grid:1:0:0:0 pour 1 matin 0 midi 0 soir 0 nuit)
    5- le type d'affection(Ald pour Affection longue durée)

    Comment avec quelques lignes de code recupérer ces informations sans les {} sans faire une usine a gaz.

    Merci d'avance pour votre aide.

    Motti.

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Indique nous ce que tu as déjà fait et quelle piste tu as déjà explorer et nous pourrons t'aider.
    Mais sur le principe il faut que tu arrive à décomposer ta chaîne avec logique.

    en gros pour avoir "le nom du medicament" il faut récupérer la chaîne à gauche du premier {
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sChaine est chaine = "{ZESTRIL {20 mg} cp grid:1:0:0:0 {} {} Ald {}}"
    sNomMédicament est chaine
    sNomMédicament = schaine[[2 A Position(sChaine,"{")]]
    ensuite je te laisse faire.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut Extraire les infos d'une chaine de caracteres
    voici le code que j'ai commencé a ecrire:

    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
    PROCEDURE ExtraireListeMedicaments(sLigne est une chaîne)
     
     
    nPos1,  nPos2, nNbrAccolOuvert, nNbrAccolFerme, longueur sont des entiers
    sValeur, sMedicament, sPoso, sOrdo est une chaîne
     
    sValeur 	= ""
    sMedicament	= ""
    sPoso		= ""
    sOrdo		= ""
     
    nNbrAccolOuvert = ChaîneOccurrence(sLigne, "{")
    nNbrAccolFerme	= ChaîneOccurrence(sLigne, "}")
     
    SI nNbrAccolOuvert = 1 ET nNbrAccolFerme = 1 ALORS
    	RENVOYER sValeur
    SINON
    	nPos1 = PositionOccurrence(sLigne,"{",1)
    	nPos2 = PositionOccurrence(sLigne,"}",nNbrAccolFerme)
    	longueur = (nPos2 - 1) - nPos1
    	sValeur = Milieu(sLigne, nPos1+1,longueur)
    	// Construire la chaine suivant le modele: sMedicament + TAB + sPoso + RC
    	TANTQUE Taille((sValeur) <> 0)
    		nPos1		= PositionOccurrence(sValeur,"{",1)
    		sMedicament	= SansEspace(Gauche(sValeur,nPos1-1))
    		sValeur		= Milieu(sValeur, nPos1+1)
    		nPos2 		= PositionOccurrence(sValeur,"}",1)
    		longueur 	= (nPos2 - 1) - 1 
    		sMedicament = sMedicament + " " + Milieu(sValeur, 1, longueur) 
    		sValeur		= Milieu(sValeur, nPos2+1)
    	FIN
    	RENVOYER sOrdo
    FIN
    mais il me semble que je me dirige vers une usine a gaz

    Cordialement

    Motti

  4. #4
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Bonjour

    Penses d'utiliser les balises codes pour encadrer ton code ça permet de conserver les alignements et de le rendre plus compréhensible...

    Si le format est relativement stable voici un code qui permet de récupérer les différentes valeurs
    En 1er on fait en sorte d'avoir un seul caractère séparateur "}"
    Après il suffit de récupérer chaque valeur en fonction de sa position en faisant attention que Forme et Posologie sont ensemble mais séparé par un espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sMedicament, sDosage, sForme_Poso, sForme, sPoso, sType_Affect est une chaîne
    sLigne est une chaîne = "{ZESTRIL {20 mg} cp grid:1:0:0:0 {} {} Ald {}}"
    sLigne = Remplace(sLigne,"{","}")
     
    sMedicament 	= SansEspace(ExtraitChaîne(sLigne,2,"}"))
    sDosage		= SansEspace(ExtraitChaîne(sLigne,3,"}"))
    sForme_Poso	= SansEspace(ExtraitChaîne(sLigne,4,"}"))
    sForme		= SansEspace(ExtraitChaîne(sForme_Poso,1," "))
    sPoso		= SansEspace(ExtraitChaîne(sForme_Poso,2," "))
    sType_Affect	= SansEspace(ExtraitChaîne(sLigne,8,"}"))
    a toi de l'ajuster en fonction de tes besoins...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  5. #5
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    un truc complètement nul à essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sMedicament, sDosage,sForme, sPoso,chp1,chp2,sType_Affect,chp3 est une chaîne
    sLigne est une chaîne = "{ZESTRIL {20 mg} cp grid:1:0:0:0 {} {} Ald {}}"
    VérifieExpressionRégulière(sLigne,"\{(.+) +\{(.*)\} +(.*) +(.*) +\{(.*)\} +\{(.*)\} +(.*) +\{(.*)\}\}",
                               sMedicament,sDosage, sForme, sPoso,
                                chp1,chp2, sType_Affect,chp3)

  6. #6
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    un peu moins nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sMedicament, sDosage,sForme, sPoso,chp1,chp2,sType_Affect,chp3 sont des chaînes
    sLigne est une chaîne = "{ZESTRIL       {20 mg}     cp grid:1:0:0:0       {} {}        Ald                       {}}"
    VérifieExpressionRégulière(sLigne,"\{([^ ]+)[ ]+\{(.*)\}[ ]+([^ ]+)[ ]+([^ ]+)[ ]+\{(.*)\}[ ]+\{(.*)\}[ ]+([^ ]+)[ ]+\{(.*)\}\}",
                               sMedicament,sDosage, sForme, sPoso,
                                chp1,chp2, sType_Affect,chp3)

  7. #7
    Membre éprouvé Avatar de wimbish
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 416
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    C'est du JSON non ?
    Si oui, fait une recherche sur les parseurs JSON cela sera peut êtres utile dans le reste de ton dev.
    Christophe.

    Tous les chemins mènent à Rome http://doc.pcsoft.fr/fr-FR/

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Tout d'abord merci a Nullosse, l'utilisation de la fonction VérifieExpressionRégulière() m'a fait gagner beaucoup de temps.

    Je suis confronté a un autre probleme:
    quelque fois le Medicament apparait avec un espace apres l'accolade ex:
    {{ BRONCHOKOD SANS SUCRE }
    et quelquefois le Medicament apparait avec 2 espaces apres l'accolade ex: {{ MINISINTROM}

    j'ai essayé d'enlever les espaces avec la fonction Remplace ainsi:
    Remplace(sValeur, "{ ", "{")
    mais ca ne marche pas.
    Est-ce que quelqu'un a eu idée pour enlever ces espaces. j'en ai besoin pour compter le nombre de medicaments afin de faire une boucle sur la chaine qui contient plusieurs medicaments dans la meme chaine.

    Merci d'avance.

    EDIT :
    Finallement apres revérification la commande suivante:
    Remplace(sValeur, "{ ", "{")
    fonctionne bien. je m'etais juste trompé sur le nombre d'epaces a mettre après l'accolade.

    Cordialement

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Citation Envoyé par Mordehai Voir le message
    j'ai essayé d'enlever les espaces avec la fonction Remplace ainsi:
    Remplace(sValeur, "{ ", "{")
    mais ca ne marche pas.
    Salut,

    Pourquoi pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Remplace(sValeur, " ", "")
    avant ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Remplace(sValeur, "{   ", "{")
    Bon DEV

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je pense qu'il faudrait que tu fasses un analyseur syntaxique/lexicographique. Je m'explique, il faut que tu listes les cas "tordu" pour les traiter :
    Si tu as "{ { Médicament}", il faut que tu réussisses à le transformer en "{Médicament}".
    La suppression directes de tous les espaces ne fonctionnera pas car tu auras : " { { Nom du Médicament}" qui deviendra " {{NomduMédicament}".

    Il faut que tu reconstruises une chaine "correcte" en parcourant la chaine initiale. Pour cela, écris un automate à états finis.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Bonjour

    Essaye le code de mon précédent message il semble qu'il résout ton problème d'espace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sMedicament, sDosage, sForme_Poso, sForme, sPoso, sType_Affect est une chaîne
    sLigne est une chaîne = "{ZESTRIL {20 mg} cp grid:1:0:0:0 {} {} Ald {}}"
    sLigne = Remplace(sLigne,"{","}")
     
    sMedicament 	= SansEspace(ExtraitChaîne(sLigne,2,"}"))
    sDosage		= SansEspace(ExtraitChaîne(sLigne,3,"}"))
    sForme_Poso	= SansEspace(ExtraitChaîne(sLigne,4,"}"))
    sForme		= SansEspace(ExtraitChaîne(sForme_Poso,1," "))
    sPoso		= SansEspace(ExtraitChaîne(sForme_Poso,2," "))
    sType_Affect	= SansEspace(ExtraitChaîne(sLigne,8,"}"))
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  12. #12
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Salut

    Je te conseille également d'utiliser les expressions régulières. Cependant celles de windev étant faiblardes, tu devrais utiliser le le regex de vbs.

    Je n'ai plus le lien mais quelqu'un a déjà posté tout ce qu'il faut a ce sujet. fais une recherche au besoin.
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/09/2014, 13h55
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. Réponses: 4
    Dernier message: 11/05/2006, 14h41
  4. Extraire du numerique dans une chaine de caractere
    Par jane2002 dans le forum Access
    Réponses: 4
    Dernier message: 08/03/2006, 12h33
  5. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34

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