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 :

comparaison chaine de catarctères accentués


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut comparaison chaine de catarctères accentués
    Bonjour

    J'ai une liste de communes avec leur code postal dans un fichier texte.
    Cette liste est triée par ordre alphabétique et par exemple j'ai

    Abbecourt
    Abbécourt

    Je lis ce fichier avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim Flux As New StreamReader(OFD.FileName, Encoding.Unicode)
    et je le charge dans un tableau.

    J'ai alors besoin de refaire un tri en prenant en compte le nom de la commune et son code de département .
    J'utilise alors la fonction CompareTo pour reclasser ma liste.
    Mais CompareTo considère que Abbécourt est < que Abbecourt
    Dans l'aide je n'ai pas vu de surcharge ou d'option permettant d'ajuster ce résultat

    Merci pour votre aide.

    Bernard

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Un simple appel de la méthode Compare avec les bons arguments permet de palier à ce manque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       Public Function Compare(one$, two$) As Integer
            Return String.Compare(one, two, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace Or CompareOptions.IgnoreCase)
        End Function
    EDIT : Lorsque tu lis ton fichier avec ton Streamreader je te recommande de supprimer cet argument : A+

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ou bien, tu vas dans ton MyProject et tu changes Option Compare Binary par Option Compare Text

    Su tu veux que ce soit Compare Text pour tous tes projets, tu regardes dans les options

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par BernardBouree Voir le message
    Mais CompareTo considère que Abbécourt est < que Abbecourt
    Bonjour.

    Voilà qui est étrange, je viens de faire un test et j'obtiens bien -1 pour String.Compare("Abbecourt", "Abbécourt").

    Les pistes de réflexion :
    a) Vérifier que la culture courante est bien française (fr-FR). Si ce n'est pas le cas c'est peut-être un tri spécifique à la culture locale. Dans ce cas mieux vaudrait ne rien faire plutôt que d'imposer la culture française.

    b) L'exemple pris est-il le véritable cas rencontré ? Car l'ordre français a une petite subtilité : quand deux mots ne diffèrent que par leurs accents, l'ordre de priorité des accents est de droite à gauche.

    c) Cela pourrait être un problème de normalisation des chaînes, auquel cas je recommande de préalablement les normaliser (String.Normalize).

    d) Tu as fait un tri sur plusieurs critères si j'ai bien compris. As-tu bien utilisé un tri stable (qui en cas d'égalité préserve l'ordre initial) ? C# ne fournit pas d'algorithme stable.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut
    Bonjour

    Je suis désolé j'ai oublié de demander l'envoi des réponses et ai cru qu'il n'y avait pas de réponse.
    Merci pour vos conseils.

    Oui le cas de comparaison est réel.
    Je vais donc essayer vos conseils.

    Bernard

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/07/2008, 16h53
  2. lecture fichier et comparaison chaines de caracteres
    Par john123 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 08/05/2007, 11h38
  3. Comparaison chaines de caractères
    Par mmarcoboss dans le forum C
    Réponses: 6
    Dernier message: 19/12/2006, 16h15
  4. Pb de comparaison chaine
    Par Celia1303 dans le forum Access
    Réponses: 5
    Dernier message: 05/05/2006, 16h45
  5. Chaines avec caractères accentués dans interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2004, 17h12

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