1. #1
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut Liste ou fichier de mots et synonymes pour exploiter sur vb6

    Bonjour à tous.
    Je développe une petite application en VB6 qui devra remplir (selon le niveau de difficulté) une grille de mots fléchés.
    J’ai déjà une liste de mots(environ 130000) avec leurs fréquences d’utilisation (très pratique).
    Je recherche un fichier style .txt ou .dat qui regrouperait une liste de mots français et leur synonymes style ‘mot,synonyme1, synonyme2 ect’,et malgré plusieurs heures de recherche sur le net aucune source trouvée.
    J'ai essayer de rechercher dans les forums,mais pas de réponses.
    Si vous pouvez m’aider car je commence à désespérer de trouver ce fichier.
    Merci à toutes réponses.
    Cordialement.

  2. #2
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut Liste de synonymes

    ReBonjour à tous.
    Résolu grace à thesaurus-v2.3
    Si vous exploiter cette base merci de m'expliquer le fonctionnement du fichier .idx.
    Car j'ai du mal à trouver un mot avec accent grave ou aigu alors qu’ils existent dans le fichier.
    J'utilise la fonction InStr qui trouve tous les mots sans accent sans problèmes,
    et j'ai essayer la comparaison binaire ou textuelle, si une personne à une autre idée je suis preneur ...
    Merci à toute aide possible.
    bonne soirée à tous.
    Michel

  3. #3
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut
    J'utilise la fonction InStr qui trouve tous les mots sans accent sans problèmes,
    L'utilisation de RegExp pourrait être plus performant, en tout cas plus pointu dans la réponse suivant le(s) critère(s).
    Pour le code, il faut faire référence à Microsoft VBScript Regular Expressions 5.5 ou créer un objet

    Sans référence à Microsoft VBScript Regular Expressions 5.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim RegularExpressioN As Object
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    Si reference à Microsoft VBScript Regular Expressions 5.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim RegularExpressioN As RegExp
    Set RegularExpressioN = New RegExp
    http://lgmorand.developpez.com/dotnet/regex/
    https://vb.developpez.com/faq/?page=Langage#regexp
    http://tahe.developpez.com/web/vbscr...e=page_4#LIV-B
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  4. #4
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Merci de votre réponse trés calée pour moi.
    J'ai bien compris (et appris) la création de variable objet , mais comment l'utiliser dans mon code
    la je sèche,je ne suis pas un pro.
    Si vous avez un exemple,sachant que mon code était;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChnTemp3 = InStr(1, ChnTemp2, StMot, 1)
    J'ai entrer ces déclarations;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim RegularExpressioN As Object
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    svp comment transformer ChnTemp3 = InStr(1, ChnTemp2, StMot, 1) avec l'utilisation de RegExp
    car malgré les liens que vous m'avez donnés je ne trouve pas de solution.
    ps j'ai essayer strcomp même problème.
    merci d'avance à toutes réponses qui me sortirai de ce problème.
    Bonne aprem à vous tous.

  5. #5
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut

    Le plus simple, télécharger la source de ce petit programme Manipulation de l'objet RegExp
    Je te conseil de faire référence (Alt+p ---> r dans l'éditeur VB6) cocher Microsoft VBScript Regular Expressions 5.5, puis, toujours dans l'éditeur VB6, F2 qui ouvre la boite explorateur d'objet, sélectionner la librairie VBScript_RegExp_55.
    De cette boite, toutes les méthodes et propriétés sont définies, avec une petite explication.
    Pour une aide plus poussée, charger scr55fr.exe sur le site de http://www.bellamyjc.org/fr/vbsgeneralites.html.
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  6. #6
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Merci de vos précieux conseils que je vais suivre à la lettre,
    et essayer de me dépatouiller avec mon peu de connaissances en vb6.
    Je reviendrai pour dire si cela a résolu mon problème.
    merci encore et bonne soirée à tous.

  7. #7
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    svp comment transformer ChnTemp3 = InStr(1, ChnTemp2, StMot, 1) avec l'utilisation de RegExp
    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
    Dim RegularExpressioN As Object
    Dim ResulT As Object
    Dim Match As Object
    Dim MsG
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    RegularExpressioN.Pattern = ChnTemp2
    Set ResulT = RegularExpressioN.Execute(StMot)
    Set Match = ResulT.Item(0)
     
    MsG = MsG & "position: " & Match.FirstIndex & _
                            "  Longueur: " & Match.Length & _
                            " Valeur: " & Match.Value
     
    Set Match = Nothing
    Set ResulT = Nothing
    Set RegularExpressioN = Nothing
     
    MsgBox MsG, vbInformation
    si StMot = "Parlement Européen et du Conseil"
    et ChnTemp2 = "(\w*(pée)\w*)"
    MsG = position: 10 Longueur: 8 Valeur: Européen
    Cela est quand même plus complet que la simple méthode Instr
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  8. #8
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Bonjour a tous,et merci d'avoir pris le temps d’écrire ce code pour me dépanner.
    Désoler mais je suis un peu perdu car l'utilisation de variables objet est nouvelle pour moi.
    Mais je m’aperçoit que effectivement les possibilités avec "RegExp" sont beaucoup plus efficaces.
    Je vais continuer à chercher et à adapter ce code à mon programme avec cette (super) méthode,
    en tous cas merci beaucoup pour votre aide.

  9. #9
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Bonsoir à vous tous.
    Je reviens vers vous car malgré avoir essayer plusieurs solutions à partir de votre code,
    J’obtient le même résultat ; ne trouve toujours pas les mots avec accent.
    Et à la ligne ;Set Match = ResulT.Item(0),
    message "Appel de procédure ou argument incorrect (erreur 5)"
    J'ai essayer d'utiliser ces deux codes ;
    ' StMot = "(\w*(" + StMot + ")\w*)" ' ou ' StMot = "\b(" + StMot + ")\b" ' pour rechercher le mot juste mais rien n’y fait alors que tous les autre mots sont trouvés sans soucis, dés qu'un accent est présent dans StMot cela ne fonctionne plus.
    je précise que le fichier ou la recherche s’effectue est 'thes_fr.idx' de thesaurus-v2.3, et même sur le fichier 'thes_fr.txt' même résultat.
    Ou bien y a t'il un code spécial à appliquer pour la recherche de mots avec accent quel qu'il soit ?
    J'ai consulté la page "http://tahe.developpez.com/web/vbscript/?page=page_4#LIV-B" mais n'ai pas trouvé d'autres formules pour la recherche de chaine de caractère avec accent.

    Merci à toute réponse,cordialement.

  10. #10
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut

    As tu chargés le code source de Manipulation de l'objet RegExp?
    Tu confonds/mélanges la phrase où chercher, la chose à rechercher et la construction du Pattern.
    Vois le résultat que tu peux (que tu vas bientôt ) obtenir
    Nom : RegExpModel.JPG
Affichages : 66
Taille : 33,7 KoSi tu parviens à utiliser ce programme et avoir le résultat attendu, je t'aiderais à inclure la partie code dans ton propre code.
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  11. #11
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Une nouvelle fois merci.
    je met cela en application et après plusieurs essais cela fonctionne correctement avec accents aussi.
    Mais pourquoi cela ne fonctionne pas dans mon programme mystère?
    Alors que tous les mots sans accents sont trouvés sans problemme.
    Et je ne trouve pas d'aide pour patern.

  12. #12
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut

    J'ai régénéré le lien pour télécharger le zip (version VB6).

    Si tu ne parviens pas à le charger en VB6, Il existe une version VBScript ICI
    Nom : VBSEtudeRegExp.JPG
Affichages : 144
Taille : 124,7 Ko
    là il n'y a qu'à faire un copier/coller dans notepad ou mieux notepad++ du programme principal (enregistré sous le nom EtudeRegExp.hta) et l'aide (enregistré sous AideEtudeRegExp.hta)
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  13. #13
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Une nouvelle fois merci.
    je met cela en application et après plusieurs essais cela fonctionne correctement avec accents aussi sur votre exemple et son code lancé avec vb6.
    Mais pourquoi cela ne fonctionne pas dans mon programme, alors que tous les mots sans accents sont trouvés sans problème.
    je lance la recherche avec 'StMot = "(\w*(" + StMot + ")\|w*)",
    le'|' est la car si il ne suit pas le mot le mot peux dépasser exemple cinquante et cinquantenaire.
    Fonctionne parfaitement tant qu'il n'y a pas de (satanés) accents.
    Si accent dans le mot ; 'Appel de procédure ou argument incorrect (erreur 5)'.
    Alors qu'il est bien présent dans le fichier.
    Est ce que cela vient que dans le fichier d'indexation il n'y a pas d'espace entre les mots et que le '|' suit chaque mots
    Ouvert à toute aide.
    bonne soirée à tous.

  14. #14
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Re

    On reprend depuis le début, avec plus de détails.

    si
    StrRech= le littéral à rechercher
    StrText = le texte où rechercher
    MyPattern = la construction du pattern
    ResulT = le résulta de l'appel à RegularExpressioN.Execute
    Match = le contenu de(s) parenthèse(s) capturante(s) du pattern

    si
    StrRech= "zé"
    StrText = "je voudrai voir si zébrure va être trouvé"
    MyPattern = "(\w*" & StrRech & "\w*)"


    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
    Dim StrRech As Strign, StrText As String, MyPattern As String
    Dim RegularExpressioN As Object, ResulT As Object, Match As Object
     
    StrRech = "zé"
    StrText = "je voudrai voir si zébrure va être trouvé"
    MyPattern = "(\w*" & StrRech & "\w*)"
     
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    RegularExpressioN.Pattern = MyPattern
    Set ResulT = RegularExpressioN.Execute(StrText)
     
    If ResulT.Count <> 0 Then
        Set Match = ResulT.Item(0)
        MsgBox "position: " & Match.FirstIndex & "  Longueur: " & Match.Length & " Valeur: " & Match.Value, vbInformation
        Else
        MsgBox "Pas d'occurence trouvée", vbInformation
    End If
     
    Set Match = Nothing
    Set ResulT = Nothing
    Set RegularExpressioN = Nothing
    Contenu du MsgBox: Nbr.d'occurence: 1 position: 19 Longueur: 7 Valeur: zébrure

    Si StrRech contient "toto" et/ou que MyPattern n'est pas égal à (\w*zé\w*),
    Contenu du MsgBox: Pas d'occurence trouvée
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  15. #15
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Merci de tous les détails.
    Malgré mes efforts mon code ne trouve toujours pas les mots avec accent.
    Est ce que j'ai fait une erreur dans ce code ?
    Pièce jointe un extrait de fichier thes_fr.idx ou la recherche est faite pour le mot révolution.
    Si dans le fichier complet StMot2 = "existence" ou "vulgaire" ou "vulgairement" recherche Ok
    Mais si "révolution" ou "troisième" ou mot avec accent,'Appel de procédure ou argument incorrect (erreur 5)'.
    Mon code (grace a vos exemples) ;
    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
    34
    Private Function RechercheDéfinition(StMot As String, Optional LgPosition As Long, Optional StDef1 As String, _
    Optional StDef2 As String, Optional StDef3 As String, Optional StDef4 As String, Optional StDef5 As String)
    Dim ChnTemp2 As Variant, ChnTemp3 As String, ChnTemp4 As String, ChnTemp5 As String, LgPosi As Long, _
    StMotTropLong As String, StMot2 As String
    'Ouvrir le fichier d'indexation
    Open "C:\Users\Micle\Desktop\Mots Croisés\thesaurus-v2.3\thes_fr.idx" For Input Shared As #1
        Do While Not EOF(1)
            Line Input #1, ChnTemp2
            'Si "|" ne suit pas le mot le mot peux dépasser exemple 'cinquante et cinquantenaire'
            'Donc imposer la position dans la recherche le "|" à la fin du mot
            StMot2 = "(\w*" & StMot & "\|w*)"
            'StMot2 = "\b(" + StMot + ")\b" '\bjuste\b ' Essai pour avoir le mot juste
            Dim RegularExpressioN As Object, ResulT As Object, Match As Object, MsG
            Set RegularExpressioN = CreateObject("VBScript.RegExp")
            RegularExpressioN.Global = True 'Pour plusieurs occurences
            RegularExpressioN.Pattern = StMot2
            Set ResulT = RegularExpressioN.Execute(ChnTemp2)
            Set Match = ResulT.Item(0)
            MsG = MsG & "position: " & Match.FirstIndex & _
                                    "  Longueur: " & Match.Length & _
                                    " Valeur: " & Match.Value
            MsgBox MsG, vbInformation
            LgPosition = Match.FirstIndex
            'Le mot peut etre contenu dans un autre exemple; existance et coexistance
            'Donc controler la longueur du mot trouvé
            If Len(StMot2) <> Match.Length Then
                'Relancer la fonction
            End If
            Set Match = Nothing
            Set ResulT = Nothing
            Set RegularExpressioN = Nothing
        Loop
    Close #1
    End Function
    Si vous pouvez éclairer ma (grosse) lanterne ?
    Merci
    Fichiers attachés Fichiers attachés

  16. #16
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    un premier point dans ton code
    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
    34
    35
    36
    Private Function RechercheDéfinition(StMot As String, Optional LgPosition As Long, Optional StDef1 As String, _
    Optional StDef2 As String, Optional StDef3 As String, Optional StDef4 As String, Optional StDef5 As String)
    Dim ChnTemp2 As Variant, ChnTemp3 As String, ChnTemp4 As String, ChnTemp5 As String, LgPosi As Long, _
    StMotTropLong As String, StMot2 As String
     
            Dim RegularExpressioN As Object, ResulT As Object, Match As Object, MsG
            Set RegularExpressioN = CreateObject("VBScript.RegExp")
            RegularExpressioN.Global = True 'Pour plusieurs occurences
    		RegularExpressioN.IgnoreCase = True 'accepte caract. min/MAJ
    		'Ouvrir le fichier d'indexation
    Open "C:\Users\Micle\Desktop\Mots Croisés\thesaurus-v2.3\thes_fr.idx" For Input Shared As #1
        Do While Not EOF(1)
            Line Input #1, ChnTemp2
            'Si "|" ne suit pas le mot le mot peux dépasser exemple 'cinquante et cinquantenaire'
            'Donc imposer la position dans la recherche le "|" à la fin du mot
            StMot2 = "(\w*" & StMot & "\|w*)"
            'StMot2 = "\b(" + StMot + ")\b" '\bjuste\b ' Essai pour avoir le mot juste
            RegularExpressioN.Pattern = StMot2
            Set ResulT = RegularExpressioN.Execute(ChnTemp2)
            Set Match = ResulT.Item(0)
            MsG = MsG & "position: " & Match.FirstIndex & _
                                    "  Longueur: " & Match.Length & _
                                    " Valeur: " & Match.Value
            MsgBox MsG, vbInformation
            LgPosition = Match.FirstIndex
            'Le mot peut etre contenu dans un autre exemple; existance et coexistance
            'Donc controler la longueur du mot trouvé
            If Len(StMot2) <> Match.Length Then
                'Relancer la fonction
            End If
        Loop
    Close #1
            Set Match = Nothing
            Set ResulT = Nothing
            Set RegularExpressioN = Nothing
    End Function
    pour le Pattern: model étant le contenu de ta variable StMot et [\w-zâäàéèùêëîïôöçñ] permettant de tenir compte des caractères accentués
    -------------------------------------------------------------
    pour rechercher dans les dicos:

    (model[\w-zâäàéèùêëîïôöçñ]*)ou model est le debut dans le mot à rechercher

    ([\w-zâäàéèùêëîïôöçñ]*model[\w-zâäàéèùêëîïôöçñ]*)ou model est condenu dans le mot à rechercher

    ([\w-zâäàéèùêëîïôöçñ]*model)ou model est la fin dans le mot à rechercher

    Avant d'aller plus loin dans l'aide, tu désires avoir en réponse à la Function RechercheDéfinition 1 ou plusieurs occurrences?
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  17. #17
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Une seule occurrence me suffirait (si il n'est pas possible d'en avoir plusieurs) du moment que l'on interroge le fichier d'indexation.
    Je vais étudier les formes ;
    (model[\w-zâäàéèùêëîïôöçñ]*)ou model est le debut dans le mot à rechercher
    ([\w-zâäàéèùêëîïôöçñ]*model[\w-zâäàéèùêëîïôöçñ]*)ou model est condenu dans le mot à rechercher
    ([\w-zâäàéèùêëîïôöçñ]*model)ou model est la fin dans le mot à rechercher.
    Mais svp comment joindre le mot désiré avec ce modèle ?
    Exemple avec pour le citer encore "Révolution"
    J'ai essayer avec plusieur combinaisons ;
    Si StMot2 = "(\w*" & StMot & "\|w*)"
    StMot2=([\w-zâäàéèùêëîïôöçñ]*StMot2[\w-zâäàéèùêëîïôöçñ]*)
    Mais attendu ")" ... , idem avec ;'StMot2 = ([\w-zâäàéèùêëîïôöçñ] * StMot2)
    Si j'essaie StMot2 = ([\w-zâäàéèùêëîïôöçñ] * StMot2) ; 'Nom externe non défini'
    Merci à vous pour toute ces aides.
    cordialement.

  18. #18
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut

    J'ai vu ton message depuis hier, mais j'ai préféré travaillé sur un programme d'exemple qui résout (me semble t il) pas mal de cas.
    Fais un nouveau projet dans l'éditeur VB6, sur un Form
    3 Labels, Label1, Label2, Label3
    2 TextBoxs, TextRech et TextTrouver
    3 OptionButtons (indexés), Option1(0), Option1(1) et Option1(2)
    1 CommadButton, Command1
    et ce
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    Option Explicit
    'variables globales
    Dim OldNomDico As String 'mémo du dernier dico chargé
    Dim DicoStr As String ' variable contenant le dernier dico chargé
     
    Private Sub Form_Load()
    Label1.Move 180, 180
    Label1.AutoSize = True: Label1.Caption = "Mot ou partie du mot à rechercher"
    TextRech.Move 120, 420, 2535, 375
    TextRech.Text = ""
    Label2.Move 180, 840
    Label2.AutoSize = True: Label2.Caption = "ce mot est le/la:"
    Option1(0).Move 120, 1080, 1875, 375
    Option1(0).Caption = "début ou mot complet": Option1(0).Value = True
    Option1(1).Move 2040, 1080, 1575, 375
    Option1(1).Caption = "une partie du mot"
    Option1(2).Move 3660, 1080, 1095, 375
    Option1(2).Caption = "fin du mot"
    Command1.Move 120, 1800, 2775, 375: Command1.Caption = "Rechercher la/les occurrences"
    Label3.Move 180, 2280
    Label3.AutoSize = True: Label3.Caption = "Mot(s) trouvé(s):"
    TextTrouver.Move 120, 2580, 4695, 3195
    TextTrouver.Text = ""
    'TextTrouver.MultiLine = True: TextTrouver.ScrollBars = 2   <------------- à faire en desing ---------
    Me.Height = 6465: Me.Width = 5205
    End Sub
     
    Private Sub Command1_Click()
    TextTrouver.Text = "En cours de recherche ....": TextTrouver.Refresh
    TextTrouver.Text = recherchemot(TextRech.Text)
    End Sub
     
    Private Function recherchemot(StrMot As String) As String
    Dim RegularExpressioN As Object, ResulT As Object, Match As Object
    Dim LePattern As String, MsG As String, Cpt As Integer, NomDico As String
     
    If Option1(0).Value = True Then 'début ou mot complet
        LePattern = "(" & StrMot & "[\w-zâäàéèùêëîïôöçñ]*)"
        Dim Caract As String
        Caract = Left(LCase(StrMot), 1)
        NomDico = "C:\PersoFrancis\Etude RegExp\" & Caract & ".txt"
        'NomDico = "ton chemin plus le nom du dico par lettre.txt"
    End If
    If Option1(1).Value = True Then 'partie du mot
        LePattern = "([\w-zâäàéèùêëîïôöçñ]*" & StrMot & "[\w-zâäàéèùêëîïôöçñ]*)"
        NomDico = "C:\PersoFrancis\Etude RegExp\Dico.txt"
        'NomDico = "ton chemin plus le nom du dico complet.txt"
    End If
    If Option1(2).Value = True Then 'fin du mot
        LePattern = "([\w-zâäàéèùêëîïôöçñ]*" & StrMot & ")"
        NomDico = "C:\PersoFrancis\Etude RegExp\Dico.txt"
        'NomDico = "ton chemin plus le nom du dico complet.txt"
    End If
     
    If NomDico <> OldNomDico Then
        'la recherche se base sur un nouveau dico
        OldNomDico = NomDico
        DicoStr = ChargeDico(NomDico) ' chargement dans la variable globale du dico approprié
        Else
        'inutile de recharger le dico dans la variable DicoStr
        'puisque la dernière recherche était déjà basée sur le même dico
    End If
     
    If InStr(1, DicoStr, "Erreur") Then 'erreur lors du chargement du dico
        recherchemot = DicoStr: OldNomDico = "": Exit Function
    End If
     
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    RegularExpressioN.Global = True
    RegularExpressioN.IgnoreCase = True
    RegularExpressioN.Pattern = LePattern
    On Error GoTo GestErr
     
    If RegularExpressioN.Test(DicoStr) = True Then 'non obligatoire, méthode Test, permet de déclencher le Else
        Set ResulT = RegularExpressioN.Execute(DicoStr)
        For Each Match In ResulT
            MsG = MsG & "position: " & Match.FirstIndex & _
                            "  Longueur: " & Match.Length & _
                            " Valeur: " & Match.Value
            Cpt = Cpt + 1
            If Cpt <> 0 Then MsG = MsG & vbNewLine
        Next
        MsG = "Nbr.d’occurrence: " & ResulT.Count & vbNewLine & MsG
        Set Match = Nothing
        Else
        MsG = "aucune occurrence trouvée" 'la méthode Test = False
    End If
    'nettoyage
    Set ResulT = Nothing: Set RegularExpressioN = Nothing
     
    recherchemot = MsG
     
    Exit Function
    GestErr:
    recherchemot = "Erreur n°" & Err.Number _
                    & "Description:" & vbNewLine & Err.Description
    Err.Clear
    End Function
     
    Private Function ChargeDico(ChemNomFichier) As String
    Dim NumFich As Integer, StrDicoRecup As String, NbrOctet As Long
    'chargement sous forme Binary car plus rapide
    On Error GoTo GestErr
    NumFich = FreeFile
    Open ChemNomFichier For Binary As #NumFich
    NbrOctet = LOF(NumFich)
    StrDicoRecup = Space(NbrOctet)
    Get #NumFich, , StrDicoRecup
    Close #NumFich
    ChargeDico = StrDicoRecup
    Exit Function
     
    GestErr:
    ChargeDico = "Erreur n°" & Err.Number _
                    & "Description:" & vbNewLine & Err.Description
    Err.Clear
     
    End Function
    Attention à la ligne 25, 42, 47 et 52

    Avant de lancer le programme, prés requis:
    les dicos (27), un dico par lettre (a.txt (contient tous les mots commençant par a),.........,z.txt(contient tous les mots commençant par z)) et un dico général Dico.txt

    Pourquoi, le chargement d'un dico pour un mot qui commence par une lettre précisée et plus rapide que de charger un dico complet.
    Mes dicos par lettres font de 1Ko à 470Ko, le dico complet fait 3 646Ko, il contient 336 530 mots.

    Je sais que tu as signalé que tu désires utiliser une liste de mots français et leur synonymes, j'ai pas mais ...... , je pourrai peut être te proposer une solution par la suite.
    Fichiers attachés Fichiers attachés
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  19. #19
    Membre à l'essai
    Homme Profil pro
    travaileur indépandant
    Inscrit en
    juillet 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : travaileur indépandant
    Secteur : Bâtiment

    Informations forums :
    Inscription : juillet 2011
    Messages : 28
    Points : 10
    Points
    10

    Par défaut

    Salut
    Je suis en train de créer le nouveau projet et d'y adapter ton code, il vas falloir m’excuser mais comment créer 3 OptionButtons (indexés), Option1(0), Option1(1) et Option1(2),
    car j'essaie de les mettre dans un frame ou un picturebox mais quand j'execute le code ,
    à la ligne ;
    Option1(0).Move 120, 1080, 1875, 375, erreur Nombre d'arguments incorrect ou affectation de propriété non valide (erreur 450), je dois avoir raté une chose.
    désolé je ne suis pas un pro.
    En tous cas super exemple code car j'ai appris cette recherche dans un fichier ;
    chargement sous forme Binary car plus rapide
    Open ChemNomFichier For Binary As #NumFich
    Merci à toi Mr ProgElecT et aussi pour les dicos, bonne soirée.

  20. #20
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 140
    Points : 8 337
    Points
    8 337

    Par défaut

    Salut du soir

    Pour les contrôles/composants indexés, tu places un premier contrôle sur le Form ou le Frame ou le PictureBox ou ...., tu le sélectionnes, bouton droit de la souris dessus, boîte de dialogue copier.
    Tu cliques bouton droit sur l'endroit ou tu veux le coller le suivant.
    Une boîte de dialogue s'ouvre en demandant si tu veux créer un groupe de contrôles, répondre oui, voilà tu viens de créer un groupes de contrôle, le premier à pris l'index 0 celui que tu viens de coller l'index 1.
    Tu continus par un clique bouton droit pour le troisième, là pas de boite de dialogue, le nouveau contrôle prend automatiquement l'index 2, ainsi de suite si tu en veux d'autres.

    Une autre façon qui revient au même, tu places un premier contrôle, dans ces propriétés tu marques la propriété Index à 0, tu le sélectionnes, copier ....... coller ....
    Outre l’intérêt de n'avoir qu'une sub par évènement, lors de la première pose du contrôle, tu peux lui donner toutes les propriétés voulues, lors du copier, le coller suivant héritera de ces propriétés.

    Une dernière autre façon, plus technique, placer un premier contrôle indexé 0, puis par code en créer d'autres.
    Exemple avec un CommandButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_Load()
    Command1(0).Move 100, 120 'ce bouton est le premier déposé en desing
     
    Load Command1(1) 'création du bouton 2
    Command1(1).Move 1500, 120: Command1(1).Caption = "Bt2": Command1(1).Visible = True
     
    Load Command1(2) 'création du bouton 3
    Command1(2).Move 2900, 120: Command1(2).Caption = "Bt3": Command1(2).Visible = True
     
    End Sub
    Il existe une quatrième façon, plus difficiles à maitriser au niveau code, je ne l'aborderai pas aujourd'hui.

    Pour information, je me suis aperçus qu'avec ton fichier dico, le séparateur | fait planter le programme.
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

Discussions similaires

  1. Fichier FDB - Mot de passe pour y accéder
    Par patgag78 dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 26/05/2015, 20h28
  2. Réponses: 4
    Dernier message: 01/03/2012, 20h50
  3. Réponses: 2
    Dernier message: 29/02/2012, 16h20
  4. Stocker des données dans la mémoire pour exploitation sur feuilles excel
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/09/2008, 13h03
  5. Réponses: 63
    Dernier message: 06/07/2006, 16h29

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