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 :

VérifieExpressionRégulière, extraire toutes les lettres d'une chaine [WD15]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 137
    Points : 104
    Points
    104
    Par défaut VérifieExpressionRégulière, extraire toutes les lettres d'une chaine
    Bonjour à tous, je cherche à extraire toutes les lettres d'une chaines.
    exemple: 128883A.B.C -> je souhaiterai obtenir ABC mais n'arrive pas à trouver la bonne syntaxe de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sTexte est une chaîne = "128883A.B.C"
    sExtrait est une chaîne
     
    SI VérifieExpressionRégulière(sTexte,"([A-Z]+)",sExtrait) ALORS
    	Info("OK", sExtrait)
    SINON
    	Erreur()
    FIN
    Si vous avez des idées .. !

  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 : 46
    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,
    Je ferais une boucle puis je regarderai caractere par caractere si val(caractere)=caractere..
    Dans ce cas c'est un nombre.. Donc un caractere dans le cas contraire.

    Sinon regarde cette discution

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 137
    Points : 104
    Points
    104
    Par défaut
    Bonjour, le problème avec le val, c'est que le "." va rester par exemple, or je ne vais vraiment que les lettres.

    Je suis parti sur la conversion du caractère en hexa, et après je défini des limites pour A-Z et a-z, le problème c'est que je n'arrive pas à faire comprendre que "7B"(représente "{") est > à "7A" (représente "z").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sChaineHexa est une chaîne
    z est un entier = Taille(sChaine)     
    POUR i = 0 A z-1
    	sChaineHexa = NumériqueVersChaîne(Asc(sChaine[[z-i]]), "2X")
    	Trace(sChaineHexa + " " + sChaine[[z-i]] + " i = " + i)
    	SI sChaineHexa > "7A" OU sChaineHexa < 41 OU sChaineHexa > "5A" ET sChaineHexa < 61 ALORS
    		sChaine = Remplace(sChaine,sChaine[[z-i]],"")
    	FIN		
    FIN
     
     
    RENVOYER(sChaine)
    EDIT:trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI (sChaineHexa > "7A" OU sChaineHexa < 41) OU (sChaineHexa > "5A" ET sChaineHexa < 61) ALORS 
    		sChaine = Remplace(sChaine,sChaine[[z-i]],"")
    	FIN

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 308
    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 308
    Points : 9 414
    Points
    9 414
    Par défaut
    Pas trop besoin de passer par l'Hexa, mais bon, si ça te va comme ça...

    Tu as le droit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UnCaractère est caractere 
    pour...
    UnCaractère = majuscule(sChaine[[z-i]])
    si UnCaractère < "A" ou UnCaractère > "Z" alors
    ...

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Bonjour,

    Et pourquoi pas la classique fonction ASC() ?

    Sachant que "A" vaut 65 et "Z" 90, tandis que "a" vaut 97 et "z" 122.

    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
     
    sTexte est une chaîne = "BlablaBla12345six"
    sExtrait est une chaîne  = ""
     
    POUR Indice = 1 _A_ Taille(sTexte)
    	SELON Asc(sTexte[[Indice]])
    		CAS 65 A 90 //majuscule
    			sExtrait = sExtrait + sTexte[[Indice]]
    		CAS 97 A 122 //minuscule
    			sExtrait= sextrait  + sTexte[[Indice]]
    		AUTRE CAS
    			//ce n'est pas un caractère
    	FIN
    FIN
    Trace(sTexte)
    Trace(sExtrait)
    Pas testé, mais pas sorcier, donc facile à corriger.
    Testé et corrigé suite au message d'Hibernatus, juste en-dessous.
    D'accord, ce n'est pas le plus compact.
    Et il vaut effectivement mieux traduire Lenght() par Taille() en matière de fonctions Windev.

    Bon travail

    Hemgé

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Pourquoi pas ?
    Parce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Asc("A") <= Asc(Texte[[i]]) <= Asc("Z")
    C'est comme écrire : "x + 42 <= y + 42" au lieu de "x <= y"


    Et je ne connaissais pas la fonction "Longueur".

    PS. Attention : s'il faut gérer les accents, pensez à utiliser ChaineFormate (et profitez-en pour mettre tout en majuscules ou minuscules)

    PPS. Du coup j'ai vérifié ceci dans WD17 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI "a" <= "é" <= "z" ALORS
        Trace("Insensible aux accents.....")
    FIN
    sToto est une chaîne = "é" // Marche aussi avec le type caractère
    SI PAS "a" <= sToto <= "z" ALORS
        Trace("..... ou pas !")
    FIN
    Un joli bug de WinDev...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 137
    Points : 104
    Points
    104
    Par défaut
    Merci à tous

  8. #8
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    [Edit]Rien dis, le test a été fait en V17 et moi en V16, donc le comportement par défaut est différent entre la V16 et la V17. Donc à priori beau bug, je confirme dans l'état actuel des tests.

    [ReEdit]Pour complément d'information, sur la bas du test de Hibernatus qui éoque un bug. Avec le code suivant :
    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
    Trace("Test sur littéral de type chaîne")
    SI "a" <= "é" <= "z" ALORS
    	Trace("- Insensible aux accents.....")
    SINON
    	Trace("- Sensible aux accents.....")
    FIN
     
    Trace("Test sur variable de type chaîne")
    sToto est une chaîne = "é" 
    SI "a" <= sToto[[1]] <= "z" ALORS
    	Trace("- Insensible aux accents.....")
    SINON
    	Trace("- Sensible aux accents.....")
    FIN
     
    Trace("Test sur variable de type chaîne UNICODE")
    sTotoU est une chaîne = "é" 
    SI "a" <= sTotoU <= "z" ALORS
    	Trace("- Insensible aux accents.....")
    SINON
    	Trace("- Sensible aux accents.....")
    FIN
     
    CONSTANTE accent = "é"
    Trace("Test sur constante de type chaîne")
    SI "a" <= accent <= "z" ALORS
    	Trace("- Insensible aux accents.....")
    SINON
    	Trace("- Sensible aux accents.....")
    FIN
    Sous Windev V16 -> résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Test sur littéral de type chaîne
    - Sensible aux accents...
    Test sur variable de type chaîne
    - Sensible aux accents...
    Test sur variable de type chaîne UNICODE
    - Sensible aux accents...
    Test sur constante de type chaîne
    - Sensible aux accents...
    Sous Windev V17 -> résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Test sur littéral de type chaîne
    - Insensible aux accents...
    Test sur variable de type chaîne
    - Sensible aux accents...
    Test sur variable de type chaîne UNICODE
    - Sensible aux accents...
    Test sur constante de type chaîne
    - Insensible aux accents...

  9. #9
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Bonjour,

    Si ça vous intéresse, sachez que le bug ne concerne que le cas où les 3 opérandes sont des littérales, donc un cas qui ne doit jamais être utilisé.
    On peut mettre le "a" ou le "z" dans une variable et pas le "é", et ça redevient sensible aux accents.

    Donc c'est pas grave.

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

Discussions similaires

  1. Fonction permettant d'extraire les Lettres d'une chaine de caractères
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/09/2010, 07h49
  2. [RegEx] Extraire toutes les cellules d'une page html
    Par Patrick dans le forum Langage
    Réponses: 1
    Dernier message: 16/04/2008, 23h35
  3. supprimer toutes les occurrences d'une chaine dans une autre
    Par identifiant_bidon dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2007, 10h36
  4. connaitre toutes les occurences d'une chaine
    Par semaj_james dans le forum C
    Réponses: 2
    Dernier message: 11/12/2005, 14h46
  5. Modifier tout les fichier comportant une chaine
    Par narmataru dans le forum Linux
    Réponses: 10
    Dernier message: 28/09/2004, 16h58

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