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

VB.NET Discussion :

Comparer une chaîne de caractères à une autre chaîne de carctéres spécifique [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Comparer une chaîne de caractères à une autre chaîne de carctéres spécifique
    Bonjour à tous,
    Je but sur le problème suivant :
    je pilote en VB.net un logiciel de DAO, plus précisément j'utilise une commande du type TraiteLesObjetsDuCalque ("NomDuCalque")
    Dans le logiciel je doit traiter uniquement les calques correspondant à une suite de caractères bien particulière composé de lettres de l'alphabet. (Je dois donc faire une comparaison).
    Par exemple :
    A
    B
    C
    D
    .....
    AA
    AB
    AC
    AD
    .....
    BA
    BB
    BC
    BD
    ....etc (je m’arrête à D pour l'exemple mais ça va jusqu'à Z, et le nombre de caractères est indéfini)

    NOTA : La commande n'est pas sensible à la casse (Minuscule/Majuscule).
    La question est comment faire la comparaison en évitant de créer un dictionnaire, le nombre de calques pouvant être assez conséquent.

    Merci beaucoup pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pas compris la question
    comparaison = ou comparaison LIKE ?

    pour du = le dictionnaire risque d'être ce qu'il y a de plus performant (sinon un hashage manuel avec un index)
    pour du startswith, un dictionnaire par lettre de début ira très vite aussi

    enfin tu es réellement embêté par les perfs ? nombre de string ? taille ?

    l'adjectif conséquent reste vague de manière objective, car interprété de manière subjective
    chacun a ses habitudes là dessus, il y a des gens qui m'ont dit récemment "on a une grosse base de données, de plusieurs dizaines de Mo", pour moi une grosse base de données c'est plus 50Go, et pour d'autres ca sera 1To
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour,
    Je suis comme Pol63 => pas compris...
    La question est comment faire la comparaison
    Comparaison entre quoi et quoi?

    J'ai vu que tu prépares une fonction/sub 'TraiteLesObjetsDuCalque ("NomDuCalque")'
    Les ABCD correspondent au nom du calque ou à ce qu'il contient?

    PS: regarde ma signature
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour, merci pour votre aide.
    J'ai manqué un peu de précision en effet.
    La suite de caractères est une suite logique et sont les noms des calques qui doivent être traités parmis d'autres.
    je dois donc trouver un moyen de savoir si chaque calque correspond à cette suite logique avec un opérateur égal.

    Si NomDuCalque = ? alors 'TraiteLesObjetsDuCalque ("NomDuCalque"),

    Le nombre de calques étant indéfini et la suite logique également, Le problème est de savoir comment faire pour reconnaître que chaque calque correspond à cette suite logique.

    Merci beaucoup si vous pouvez m'aider.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pas beaucoup mieux compris
    et ca ressemble à du vb6 d'utiliser un string pour coder quelque chose, tu aurais un list(of calque) dans l'ordre de traitement avec une méthode Traitement sur la classe calque tu n'aurais pas de question à te poser
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre actif Avatar de ShadowTzu
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 296
    Points
    296
    Par défaut
    De ce que j'ai compris, tu cherche à créer toute les combinaison de lettre possible et les tester avec le nom de plusieurs calques, ce qui fait des millions de combinaison avec les 26 lettres, l'approche est donc mauvaise. Je te donne tout de même un lien: http://stackoverflow.com/questions/1...-with-x-string

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour, je crois que j'ai trouvé la solution à mon problème grâce au Expressions régulières.
    Avec ce Regex : [a-zA-Z]{1,2} (J'ai pas encore testé mais ça devrait fonctionner)

    J'ai aussi revu mes besoins et me limite à seulement 2 caractères.
    Je passe en résolu, merci beaucoup.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    J'ai parlé trop vite, mon Regex match des mots de plus de 2 caractéres alors que j'ai fixé la limite à 1 ou 2 caratéres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim rg As New Regex("[A-Z]{1,2}") ' ou Dim rg As New Regex("[a-zA-Z]{1,2}") 
    .....
           If rg.IsMatch(NomDuCalque) Then
                        Application.ShowAlertDialog(String.Format("The layer {0} is a SEE layer", NomDuCalque))
           End If
    Une idée ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    logique, l'expression [A-Z]{1,2} trouvera, par exemple dans ABC, 2 correspondances : AB et C et répondra favorablement.
    Il faut lui dire que du début à la fin de la chaine on ne doit trouver que 1 ou 2 lettres, en utilisant les ancres ^$ début et fin de chaine :
    Dans ce cas l'expression ne trouvera aucune correspondance dans ABC.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci beaucoup chrismonoye, ca fonctionne parfaitement .

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 12/08/2013, 15h11
  2. [Free Pascal] Passage d'une chaîne de caractères à une routine C
    Par tridule dans le forum Free Pascal
    Réponses: 5
    Dernier message: 08/02/2009, 16h02
  3. Réponses: 4
    Dernier message: 07/06/2007, 22h35
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. Passage des chaînes de caractères à une application CGI
    Par Thom@s dans le forum Composants VCL
    Réponses: 10
    Dernier message: 03/12/2004, 00h13

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