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

Qt Discussion :

Supprimer tous les accents d'une chaine


Sujet :

Qt

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 312
    Points : 4 224
    Points
    4 224
    Par défaut Supprimer tous les accents d'une chaine
    Bonjour,

    Je cherche à supprimer tous les accents d'une chaine de caractère pour effectuer des recherches dessus. J'ai fait ceci pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    QString SpecialCharsRemover::removeSpecialChars(QString text) {
        QString s=text.toLower();
        s.replace("â", "a"); s.replace("ä", "a"); s.replace("á", "a"); s.replace("à", "a"); s.replace("ã", "a"); s.replace("å", "a"); //a
        s.replace("ç", "c"); //c
        s.replace("ê", "e"); s.replace("ë", "e"); s.replace("é", "e"); s.replace("è", "e"); //e
        s.replace("î", "i"); s.replace("ï", "i"); s.replace("í", "i"); s.replace("ì", "i"); //i
        s.replace("ñ", "n"); //n
        s.replace("ô", "o"); s.replace("ö", "o"); s.replace("ó", "o"); s.replace("ò", "o"); s.replace("õ", "o"); s.replace("ø", "o"); //o
        s.replace("ß", "ss"); //ß -> ss
        s.replace("û", "u"); s.replace("ü", "u"); s.replace("ú", "u"); s.replace("ù", "u"); //u
        s.replace("æ", "ae");
        return s;
    }
    Il m'en manque sans doute, mais dois-je tout traiter "manuellement" ou existe-t-il des librairies ou sources sur ce même problème ?

    Note : justilise Qt principalement dans mon programme.

  2. #2
    Membre actif
    Homme Profil pro
    Consultant BigData
    Inscrit en
    Juillet 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant BigData

    Informations forums :
    Inscription : Juillet 2009
    Messages : 129
    Points : 280
    Points
    280
    Par défaut
    ça n'enlève pas tout ce que tu voulais, mais tu peux déjà réduire pas mal avec des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s.replace(QRegExp("[éèëê]"), "e");

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 312
    Points : 4 224
    Points
    4 224
    Par défaut
    Merci Oussapik, ça va déjà rendre le code plus clair

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par smarties Voir le message
    Merci Oussapik, ça va déjà rendre le code plus clair
    Il est possible de le faire de manière complète, mais cela nécessite l'utilisation d'une implémentation complète et correcte d'Unicode. Lorsqu'une chaine est sous forme normalisée en Unicode, les marques diacritiques (accents, ...) sont "superposées" au caractère sous-jacent (faisant partie du code ASCII standard). Il est donc possible de supprimer la marque en question avec un simple filtre (return (c & 0x7f);) Cependant, la fonction qui permet de convertir une chaine non normalisée en chaine normalisée est complexe (et elle s'appuie elle aussi sur une table de caractères particuliers). C'est probablement trop compliqué pour ce que tu souhaites faire, et je te conseilles donc d'utiliser ta méthode (ou celle d'Oussapik, vu sa clarté et sa concision).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 312
    Points : 4 224
    Points
    4 224
    Par défaut
    Merci pour les précision.
    Je vais garder la méthode de Oussapik car à part lors de l'insertion dans la base de données ou il peut y avoir beaucoup d'enregistrement (30k-50k), le reste concernera des requêtes ponctuelles, j'ai peu de traitement par lots.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 312
    Points : 4 224
    Points
    4 224
    Par défaut
    J'ai un problème, ça ne marche pas :
    Les données que je lis sont des tag ID3 et des noms de fichiers, mais quand j'affiche les données traitées dans la console j'ai des ? à la place des accents.
    Est-ce un problème d'encodage de caractère en entrée ?
    Est ce que il y a une incidence à utiliser QByteArray à la place de QString par rapport à l'encodage ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par smarties Voir le message
    J'ai un problème, ça ne marche pas :
    Les données que je lis sont des tag ID3 et des noms de fichiers, mais quand j'affiche les données traitées dans la console j'ai des ? à la place des accents.
    Est-ce un problème d'encodage de caractère en entrée ?
    Est ce que il y a une incidence à utiliser QByteArray à la place de QString par rapport à l'encodage ?
    Ou en sortie. Rien n'indique que la console utilise le bon jeu de caractère. Que te dis le debugger, bein souvent plus apte a te donne une réponse satisfaisante ?
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 312
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Ou en sortie. Rien n'indique que la console utilise le bon jeu de caractère. Que te dis le debugger, bein souvent plus apte a te donne une réponse satisfaisante ?
    Sur ce que j'ai mis plus haut, rien n'a été remplacé lors du traitement
    Actuellement j'ai pas utilisé de débugger, je me suis contenté des messages du compilateur et de tester dans la foulée.

Discussions similaires

  1. Supprimer tous les blancs dans une chaine de caractères
    Par joel74 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 20/02/2014, 16h19
  2. Réponses: 14
    Dernier message: 27/04/2011, 09h32
  3. Réponses: 3
    Dernier message: 17/03/2010, 14h50
  4. Supprimer les accent dans une chaine
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/09/2006, 11h04
  5. Supprimer TOUS les espaces d'une chaine
    Par tavekapaclike1er dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/12/2005, 15h19

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