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 :

Ne pas tenir compte des majuscules/minuscules cas spécifique


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut Ne pas tenir compte des majuscules/minuscules cas spécifique
    Bonjour à tous,
    J'ai entendu parler de la méthode ToUpper ou ToLower mais je ne trouve pas le moyen de parvenir à mon objectif.
    Imaginez un éditeur de code qui colore certains mots on appelle ça la coloration syntaxique.
    Mais que l'utilisateur écrive "private class" ou "private Class" ou "Private class" les deux mots se coloreront en bleu. Je souhaite faire en sorte que mon logiciel puisse colorier des mots sans discriminer les mots en fonction des majuscules et minuscules mais juste en fonction des lettres qui compose le mot. De cette sorte je peux avoir une coloration syntaxique qui s'applique correctement meme si l'utilisateur écrit cLassE.
    Pourriez vous me proposer du code pour cela ?
    Je vous remercie !

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,
    Là, je ne comprends pas la question du fait que, si j'ai bien compris ta demande précédente, tu colores des mots identifiés sur base de @#. Alors qu'importe si les caractères suivants sont majuscules ou minuscules ?
    Sûr que je n'ai pas tout compris...

  3. #3
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut
    Bonjour Phil,
    Effectivement j'ai reposté car ce n'est pas la même chose.
    Ici il s'agit de mots entiers, pas de soucis pour les colorier mais par exemple si je dit au logiciel de colorier en bleu "class" si l'utilisateur écrit Class et ben ca ne marchera pas à cause de la majuscule. Je voudrais dire au logiciel colore "class" ne tient pas compte des majuscules si il y en a et des minuscules si il y en a.

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Merci pour ta réponse

    L'algorithme suivant pourrait te convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            ' Soit la chaine à colorier qui est écrite n'importe comment (Maj/Min) (ex. Class)
            Dim ChaineAColorier As String 
     
            ' Soit la chaine observée à ce moment qui est écrite n'importe comment (Maj/Min) (ex. cLaSs)
            Dim ChaineLue As String 
     
            If ChaineLue.ToUpper = ChaineAColorier.ToUpper Then
     
                ' ... ... ... Colorier ChaineLue (ex. elle deviendra cLaSs dans la couleur désignée)
     
            End If

  5. #5
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut
    e.ChangedRange.SetStyle(BlueStyle, "(class)")
    J'ai ce type de syntaxe, je ne comprend pas bien l'histoire de chaine lue etc...
    Merci

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Quand tu donnes l'exemple de colorier le mot Class, il faut bien que ce mot soit désigné à ton code : j'utilise pour cela la variable ChaineAColorier.
    Pour savoir si les caractères à l'intérieur d'une chaîne (à l'intérieur du Text d'un TextBox, par exemple) correspondent au mot à colorier, je mets ces caractères dans une variable que j'ai nommée ChaineLue.
    Et pour savoir si ces caractères temporairement stocké dans ChaineLue sont bien ceux contenus dans la variable ChaineAColorier, je fais la comparaison sur les ToUpper de ces variables, de sorte à ne pas tenir compte des différences de casse des caractères.

    Je réfléchis toujours par rapport à un TextBox dont je peux sélectionner une partie des caractères. En reprenant l'exemple de mes explications d'hier, je ferais la recherche d'un mot avec TextBox1.Text.ToUpper.IndexOf(ChaineAColorier.ToUpper). Ce code me donnant l'indice du 1er caractère de ChaineAColorier dans le Text de la TextBox, sans se proccuper des majuscules/minuscules.


  7. #7
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim ChaineAColorier As String
                Dim Chainelue As String
                If Chainelue.ToUpper = ChaineAColorier.ToUpper Then
                    e.ChangedRange.SetStyle(BlueStyle, "class")
                End If
    Voici ce que j'ai compris de ce que vous m'avez dit. Je précise que la FastColoredTextBox est générée par le code à la création d'une nouvelle Tab donc quand vous parlez de textbox1.text ce n'est pas pareil ici je pense que "e" symbolise en quelque sorte la fastcoloredtextbox
    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
         Private Sub CSharpSyntaxHighlight(ByVal e As TextChangedEventArgs)
     
                'clear style of changed range
                e.ChangedRange.ClearStyle(BlueStyle, BoldStyle, GrayStyle, MagentaStyle, GreenStyle, BrownStyle, RedStyle)
                'string highlighting
                e.ChangedRange.SetStyle(RedStyle, """.*?")
                e.ChangedRange.SetStyle(BlueStyle, "%.+?%")
     
                'comment highlighting
                e.ChangedRange.SetStyle(GreenStyle, "//.*$", RegexOptions.Multiline)
                e.ChangedRange.SetStyle(GreenStyle, "rem/.*$", RegexOptions.Multiline)
                e.ChangedRange.SetStyle(GreenStyle, "(/\*.*?\*/)|(/\*.*)", RegexOptions.Singleline)
                e.ChangedRange.SetStyle(GreenStyle, "(/\*.*?\*/)|(.*\*/)", RegexOptions.Singleline Or RegexOptions.RightToLeft)
                'number highlighting
                e.ChangedRange.SetStyle(MagentaStyle, "\b\d+[\.]?\d*([eE]\-?\d+)?[lLdDfF]?\b|\b0x[a-fA-F\d]+\b")
                'attribute highlighting
                e.ChangedRange.SetStyle(GrayStyle, "^\s*(?<range>\[.+?\])\s*$", RegexOptions.Multiline)
                'class name highlighting
                e.ChangedRange.SetStyle(BlueStyle, "\b(class|Class|CLASS)\s+(?<range>\w+?)\b")
                'keyword highlighting
                e.ChangedRange.SetStyle(BlueStyle, "\b(abstract|as|base|bool|break|byte|case|catch|char|class|const|continue|decimal|default|delegate|do|double|else|enum|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b|#region\b|#endregion\b|")
     
                e.ChangedRange.SetStyle(BlueStyle, "(Creer\/|creer\/|Fin\/ fenetre|fenetre\/)")
                e.ChangedRange.SetStyle(SpringGreenStyle, "(TYPE:|CTN:|BORD:|OMBRE:|IMGAUTO:|\=|EDIT:|MULTILINE:|\,)")
                e.ChangedRange.SetStyle(OrangeStyle, "(\.Parametres|\.PX|\.PY|\.TX|\.TY|\.Valeur|\.CouleurFond|\.CouleurTexte|\.Evenement|\.event|\.Icone|\.ImgTitre|\.Opacite|\.titre|\.CouleurFenetre|\.CouleurTitre|\.px|\.py|\.tx|\.ty|\.opacite|\.Texte|\.Image|\.evenement|\.texte|\.Handle|\.handle)")
     
     
                e.ChangedRange.SetStyle(YellowStyle, "(@#Handle_Fenetre)")
     
                'clear folding markers
                e.ChangedRange.ClearFoldingMarkers()
    Voici le code entier concernant la coloration syntaxique.
    Comprenez mon cas particulier, comment puis je faire pour ne pas être obligé d'écrire toute les possibilités possibles ?
    Merci

  8. #8
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut Je pense avoir trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            e.ChangedRange.SetFoldingMarkers("fenetre\/", "Fin\/ fenetre", RegexOptions.IgnoreCase)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RegexOptions.IgnoreCase
    merci à lui
    Bien voici la solution

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour une coloration syntaxique temps réel, les performances ne sont pas à négliger
    donc les regex on oublie
    et tolower et toupper aussi, ca recréé un string, alors qu'il y a des méthodes d'analyse sur lequelles on peut spécifier d'ignorer la casse
    (ca doit être le cas d'indexof et de contains par exemple, avec stringcomparer.ordinalignorecase)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre averti Avatar de M.Leroy
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2019
    Messages : 49
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    pour une coloration syntaxique temps réel, les performances ne sont pas à négliger
    donc les regex on oublie
    et tolower et toupper aussi, ca recréé un string, alors qu'il y a des méthodes d'analyse sur lequelles on peut spécifier d'ignorer la casse
    (ca doit être le cas d'indexof et de contains par exemple, avec stringcomparer.ordinalignorecase)
    Bonjour
    Pas de soucis avec la fastcoloredtextbox niveau performance car elle colore au fur et à mesure
    https://www.codeproject.com/Articles...highlighting-2
    , que proposez vous pour remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     e.ChangedRange.SetFoldingMarkers("fenetre\/", "Fin\/ fenetre", RegexOptions.IgnoreCase)
    Merci.

  11. #11
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bravo pour la solution.
    Désolé de n'avoir pu t'aider.
    Bonne soirée.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/08/2017, 17h45
  2. [Débutant] Ne pas tenir compte des majuscules et minuscules
    Par Martipit dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/10/2012, 13h16
  3. Réponses: 11
    Dernier message: 11/08/2007, 16h27
  4. [vba] ne pas tenir compte des majuscules/minuscules
    Par bungler dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/07/2007, 09h07
  5. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 19h49

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