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

VBScript Discussion :

Regexp : Récupération d'un nombre entiers avec espace séparateur de milliers


Sujet :

VBScript

  1. #1
    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 Regexp : Récupération d'un nombre entiers avec espace séparateur de milliers
    Bonjour j'ai une chaine de caractère qui pourrait être l'une de celles-ci :

    393 FC 18 307 VIREMENT
    N° FACTURE FC 8 307 DATE
    Je n'arrive pas écrire le filtre regexp qui pourrait me renvoyer ce qui est souligné.

    Si possible sans espaces

    Pouvez vous m'aider ?

    Merci
    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

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par mogwai162 Voir le message
    Bonjour j'ai une chaine de caractère qui pourrait être l'une de celles-ci :
    Je n'arrive pas écrire le filtre regexp qui pourrait me renvoyer ce qui est souligné.

    je ne vois pas le souligné

  3. #3
    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
    ah zut j'avais édité le message entre temps et oublié de remettre les soulignements. désolé.
    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

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour;
    les termes VIREMENT et DATE sont littéraux ou sont des "variables" ?
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    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
    variables j'en ai peur mais ce seront les plus fréquents

    Seul le FC est vraiment constant
    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

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    donc le seul point commun à toutes ces données, c'est qu'elles sont précédées par " FC " ?
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    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
    c'est tout a fait ça
    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

  8. #8
    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
    Le nombre d'espace séparant FC du montant est variable également
    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

  9. #9
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    oki

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set regEx = New RegExp
    regEx.Pattern = " FC +([\d| ]+)"
    regEx.IgnoreCase = False
    regEx.Global = True
    Set Matches = regEx.Execute("393 FC     18 307 VIREMENT" & vbCrLf & "N° FACTURE FC 8 307 DATE")
    For Each Match in Matches   'Itère la collection Matches.  
        MsgBox(Replace(regEx.Replace(Match.Value,"$1")," ",""))
    Next
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  10. #10
    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
    Je te remercie beaucoup

    c'est un bon début, deux reproches :

    Premièrement j'ai les espaces.

    Deuxièmement, quand j'ai en entrée la chaine "N° FACTURE FC 8 307 15.20", il me renvoie le 15 en plus.

    Merci
    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

  11. #11
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Premièrement j'ai les espaces
    bin pas moi...
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Result=Replace(regEx.Replace(Match.Value,"$1")," ","")
    Msgbox Result & "   " & Len(Result)
    j'ai bien la longueur des données chiffrées sans espace superflu

    Deuxièmement, quand j'ai en entrée la chaine "N° FACTURE FC 8 307 15 200", il me renvoie le 15 en plus.
    ça c'était prévu, tu n'a pas été assez précis sur les contraintes
    si les données recherchées sont : 2 groupes numériques séparés par un espace unique immédiatement précédés par la chaine FC et un nb d'espaces indéterminés alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set regEx = New RegExp
    'regEx.Pattern = " FC +([\d| ]+)"
    regEx.Pattern = " FC +(\d+ \d+)"
    regEx.IgnoreCase = False
    regEx.Global = True
    Set Matches = regEx.Execute("393 FC     18 307   22 VIREMENT" & vbCrLf & "N° FACTURE FC 8 307 88 DATE")
    For Each Match in Matches   'Itère la collection Matches.  
      Result=Replace(regEx.Replace(Match.Value,"$1")," ","")
      MsgBox Result & "   " & Len(Result)
    Next
    edit : parenthèses superflues
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  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
    C'est tout comme je l'avais imaginé.

    La prochaine fois que je voudrai un mouton je reviendrai vers toi

    Merci beaucoup
    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

  13. #13
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    La prochaine fois que je voudrai un mouton je reviendrai vers toi
    ça tombe bien, je dessine aussi à l'occasion...
    http://www.flickr.com/photos/79315618@N02/7267585578
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  14. #14
    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 tout le monde !

    Ben me revoilà déjà :

    j'en ai fait d'autres depuis mais je bute sur celui là :

    "Facture N° : 20 589"
    "Avoir N° : 45 120 589"
    le montant sera séparé par des espaces compris entre 1000 et 999 999 999
    les mots seront séparés par un nombre d'espaces variables (sauf pour montant)
    la présence du : sera optionnelle

    et bien sur je ne veux que le montant..

    par contre il est possible d'utiliser plusieurs filtres différents. au cas ou...
    Et je préférerais que l'on recherche aussi facture et avoir

    Merci d'avance
    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

  15. #15
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    hé bin, un tuto sur les bonnes pratiques des expressions régulières ne serait pas de trop...

    avant d'entrer dans le vif du sujet, j'en profite pour simplifier l'exemple précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set regEx = New RegExp
    regEx.Pattern = " FC +(\d+) (\d+)"
    regEx.IgnoreCase = False
    regEx.Global = True
    Set Matches = regEx.Execute("393 FC     18 307   22 VIREMENT" & vbCrLf & "N° FACTURE FC 8 307 88 DATE")
    For Each Match in Matches   'Itère la collection Matches.  
      Result=regEx.Replace(Match.Value,"$1$2")
      MsgBox Result & "   " & Len(Result)
    Next
    et pour le problème de ce soir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set regEx = New RegExp
    regEx.Pattern = "(Facture|Avoir) +N°( *: +| +)((\d+) (\d+) (\d+)|(\d+) (\d+))"
    regEx.IgnoreCase = False
    regEx.Global = True
    Set Matches = regEx.Execute("Facture N°   : 20 589" & vbCrLf & "Avoir   N°  45 120 589")
    For Each Match in Matches   'Itère la collection Matches. 
      Result=regEx.Replace(Match.Value,"$4$5$6$7$8")
      Select Case regEx.Replace(Match.Value,"$1")
      Case "Facture"
        MsgBox "Montant de la facture : " & Result & "       " & Len(Result)
      Case "Avoir"
        MsgBox "Montant de l'avoir : " & Result & "       " & Len(Result)
      End Select
    Next
    bonne nuit
    edit : pour éviter de surcharger le pattern, je n'ai pas créé de parenthèses non-capturantes
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  16. #16
    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
    Ouais... Nickel comme d'habitude.

    J'étais si loin et si près à la fois...

    Enfin je te remercie beaucoup...

    Je n'ose pas te dire a bientôt mais j'ai peur d'être obligé d'y revenir, j'en n'ai encore tant a écrire.

    Merci encore
    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

  17. #17
    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
    Bonjour

    Alors, en fait on m'a demandé de bosser sur autre chose sauf que maintenant j'aime ça alors j'y reviens.

    J'ai besoin de savoir, c'est à dire aucune extraction, si une sous chaine est comprise dans une chaine.

    Ma sous chaine est propre : suite de caractères ou chiffres avec ou sans tiret ou point séparateur mais sans aucun espace.

    Ma chaine est une suite extraite d'un csv.

    ça parait tout simple sauf qu'il ne faut surtout pas que je trouve 123 dans 01234 par exemple mais je dois le trouver dans "titi 123 toto" ou même dans "123 ", "N° 123", etc...

    c'est à dire que ça doit faire un mot isolé du reste.

    j'ai bien vu \b mais je vois pas comment m'en servir et ça semble incomplet.

    Merci encore
    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

  18. #18
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    sauf que maintenant j'aime ça, j'y reviens
    hmmm je vois...

    c'est à dire que ça doit faire un mot isolé du reste.

    j'ai bien vu \b mais je vois pas comment m'en servir et ça semble incomplet.
    ah bon et pourquoi ça ?
    rechercher un motif précis sous la seule forme d'un mot entier, c'est basique il suffit de l'encadrer avec le métacaractère "limite de mot" \b
    exemple pour la chaine "1542"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set regEx = New RegExp
    regEx.Pattern = "\b1542\b"
    regEx.IgnoreCase = False
    regEx.Global = True
    Set Matches = regEx.Execute("de1542 784 7615428 edeed1542dd 1542 rt154")
    For Each Match in Matches   'Itère la collection Matches.  
      Result=Match.Value
      MsgBox Result & "   " & Len(Result)
    Next
    pour ce soir, cinq coups de fouet
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  19. #19
    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
    Que je suis con....

    Dans l'exemple il n'y avait que celui de fin alors du coup j'ai cru que ça ne marchait que pour la fin du mot et non pas pour le début.

    J'ai même pas essayé de le mettre au début.

    Je te remercie encore.
    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

  20. #20
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Que je suis con....
    mais non car ça prouve que tu commences à penser en "regexp"
    le métacaractère \b est en fait la conjugaison de deux notions effectivement distinctes :
    la limite de mot "avant" - début de mot - et la limite de mot "arrière" - fin de mot -
    bonne continuation
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

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

Discussions similaires

  1. Implémentation d'une division entre nombres entiers avec une précision arbitraire
    Par i.Polo dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/05/2015, 10h51
  2. [PowerShell] Récupération nom de fichier/repertoire avec espace
    Par joziel dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 16/12/2010, 10h03
  3. Trier des nombres entiers avec emu8086
    Par killerbee dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 20/03/2010, 00h29
  4. Réponses: 2
    Dernier message: 10/09/2007, 19h43
  5. Formater un nombre avec des séparateurs de milliers
    Par lagotonio dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2007, 19h23

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