[..] StringRegExp et les Accents

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Zaibai
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 28 mai 2014 11:52
Status : Hors ligne

[..] StringRegExp et les Accents

#1

Message par Zaibai »

Bonjour,

Ma question peut vous paraître simple mais je parviens pas à trouver ma réponse...
J'aimerais que la commande StringRegExp ne tienne pas compte des accents.

Exemple:
StringRegExp("éxpérience", '(?i)(' &EXP& ')') ==> NOK
StringRegExp("éxpérience", '(?i)(' &ÉXP& ')') ==> OK

Comment faire pour que le premier exemple soit ÉGALEMENT OK ?
Merci d'avance pour vos réponses :)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#2

Message par jchd »

Euh, ton exemple est une syntaxe incorrecte.

Enfin, cela n'est pas possible simplement avec une regexp PCRE. Tout ce que peut faire PCRE avec le support UCP (voir doc), c'est de gérer la casse (et encore avec certaines limitations).

J'ai fait une extension SQLite qui propose ce genre de choses mais c'est un poil lourd à utiliser. Ceci dit, c'est bien moins lourd que la bibliothèque ICU (19 Mb).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#3

Message par jguinch »

Sinon, si c'est uniquement pour des caractères en français, un truc comme ça pourrait suffire :
► Afficher le texte
J'ai surement oublié plein de caractères, mais ça pourrait être un début (pour un besoin limité, on est bien d'accord ?)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Zaibai
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 28 mai 2014 11:52
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#4

Message par Zaibai »

Pour la syntaxe j'avais en effet une variable à place de "EXP", autant pour moi.
C'est pour plusieurs langue, avez-vous des pistes/solutions à me fournir ?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#5

Message par jchd »

Oui, je vais te ficeler ça ce soir, je n'ai pas le temps là.
C'est pour quelles langues ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Zaibai
Niveau 2
Niveau 2
Messages : 17
Enregistré le : mer. 28 mai 2014 11:52
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#6

Message par Zaibai »

Français, anglais, allemand, italien, espagnol.
Si je ne me trompe pas, il n'y a que l'espagnol qui contient des accents (en plus du français bien sur).
J'ajouterais sans doute d'autre langue plus tard, mais avec un "modèle" je devrais m'en sortir ! :)
Merci à tous :)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#7

Message par orax »

J'ai augmenté le nombre de caractères d'après ce site http://textmechanic.com/Remove-Letter-Accents.html
Le petit inconvénient est qu'il faudra enregistrer le fichier au format UTF-8. File > Encoding...

(Ce qui est ci-dessous est basé sur le bidule code de jguinch plus haut.) :mrgreen:
► Afficher le texte
Modifié en dernier par orax le mar. 28 avr. 2015 17:09, modifié 1 fois.
Raison : ^^
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#8

Message par jchd »

Ces quatre langues utilisent des lettres accentuées ou des mots en comportant. (De passage devant l'écran !)

orax,
Ce bidule est simpliste.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#9

Message par jguinch »

@jc : simpliste peut-être, mais il pourrait couvrir le besoin s'il est complet. Mais niveau vitesse, je suis pas sûr qu'on soit au top avec un truc pareil...
Tu partirais sur quel piste toi ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#10

Message par jchd »

Voici un sketch :
► Afficher le texte
Le source et la DLL compilée en X86 sont téléchargeables ici.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#11

Message par jguinch »

J'étais sûr qu'il y aurait du SQL là-dedans...
:D
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] StringRegExp et les Accents

#12

Message par jchd »

En fait, SQLite n'est là que pour exploiter la DLL. On pourrait écrire un wrapper qui gèrerait tout ça mais il faudrait utiliser l'inteface imposée par le fait que ces fonctions (celles en C) sont écrites justement comme extensions SQLite.

Soit ça, soit récrire le module en C avec une interface directe UTF16. Je n'en ai franchement pas le temps et de plus on ne gagnerait que peu de chose à l'exercice : quelques cycles et un peu de code AutoIt pour planter le décor. Il est bien plus facile de planquer tout ça dans une UDF maison et de l'appeler comme si c'était du code UDF standard. Dans cet exemple, le code applicatif est entre les lignes de #############

Ah oui, j'oubliais : ma fonction unaccent convertit aussi les chiffres décimaux d'autres écritures (appelés "scripts" en linguistique) en chiffres usuels 0..9, fait des choses aux deux lettres sigma grecques, pareil au eszet allemand etc.

Autre bonus : la fonction typos dénombre l'écart entre deux chaînes et permet ainsi une recherche floue.

Dernier point important : contrairement à la bibliothèque ICU (un beau monstre), ces fonctions sont indépendantes des langues, même si c'est au prix de quelques approximations. Pour collationner deux chaînes, ICU impose de choisir la langue (le script) et à partir de là déploie des trésors de subtilité pour coller aux règles en vigueur pour ce script et un contexte donné(*). Comme j'avais besoin de fonctions multi-langues pour gérer une BdD alimentée par des sources parfois fort exotiques, je me suis vu contraint de parfois transgresser quelque peu l'exactitude locale au profit d'une relative universalité.

Consulter le mode d'emploi (ou plutôt ce qui en tient lieu) qui figure en tête du source C.

(*) Par exemple pour l'allemand, l'ordre du dictionnaire n'est pas le même que celui d'un répertoire téléphonique !
Autre exemple de particularisme des langues latines : en estonien, l'ordre des lettres est a ... i y j ... z ce qui rend le collationnement "naturel" faux si l'on ne tient pas compte de la langue.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre