none
Comparaison de string

    Discussion générale

  • Bonjour

    J'ai deux variables qui sont censés avoir le même contenu et je les compare pour vérification.

    Leur contenu est "Grandes-Bergeronnes {Les Bergeronnes}" pour l'une

    et "Grandes-Bergeronnes {Les Bergeronnes}" pour la seconde

    J'ai fait un copier-coller à partir du visualiseur texte des variables.

    Une comparaison renvoit False

    En convertissant ces chaines en code ASCII, je trouve

    71 114 97 110 100 101 115 45 66 101 114 103 101 114 111 110 110 101 115 32 123 76 101 115 63 66 101 114 103 101 114 111 110 110 101 115 125 

    pour la première

    et

    71 114 97 110 100 101 115 45 66 101 114 103 101 114 111 110 110 101 115 32 123 76 101 115 32 66 101 114 103 101 114 111 110 110 101 115 125 

    pour la seconde

    et je constate en effet 25ème caractère est égal à 63 dans la première chaîne et 32 dans la seconde.

    32 est le code d'un espace mais 63 est celui du ? 

    Merci pour vos explications!

    Bernard


    Bernard Bouree

    samedi 2 septembre 2017 14:05

Toutes les réponses

  • Bonsoir Bernard,

    Le code ASCII 63 est celui du point d'interrogation.

    Dans ce lien vous trouverez l'ensemble des codes ASCII : http://www.theasciicode.com.ar/ascii-printable-characters/question-mark-ascii-code-63.html

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    samedi 2 septembre 2017 16:21
  • Bonsoir Nourdine

    Pouquoi le ? ne s'affiche pas dans le string?

    Bernard


    Bernard Bouree

    samedi 2 septembre 2017 17:47
  • Avec ce code j'ai bien true : 

                string value1 = "Grandes-Bergeronnes {Les Bergeronnes}";
                string value2 = "Grandes-Bergeronnes {Les Bergeronnes}";
    
                bool isEqual = String.Equals(value1, value2);

    Est-ce ce code que vous avez utilisé? Si non, pouvez-vous partagez votre code?

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    samedi 2 septembre 2017 18:36
  • Bonjour,

    Comment les variables sont-elle affectées. V1=element1 et v2=element2 ou en d'autres termes, quelle est la source de leur contenu ?

    Ce problème ressemble à une erreur de table (iso,utf8...)


    MCh


    • Modifié C Maurice samedi 2 septembre 2017 19:52
    samedi 2 septembre 2017 19:51
  • Bonjour

    Les données comparées proviennent de deux bases Access de sources différentes.

    La première est chargée avec la méthode suivante:

    public static void ListerToponymesGeoDb(DataTable dt)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    var top = new ToponymeGeoDb();

                    try
                    {
                        if (dr["IDCity"] == null)
                        {
                            continue;
                        }
                        if (dr["IDCity"] != null && dr["IDCity"].ToString() != "")
                            top.IdCity = Convert.ToInt32(dr["IDCity"]);
                        if (dr["City"] != null && dr["City"].ToString() != "")
                            top.City = dr["City"].ToString().Trim(' ');
                        if (dr["CityGeoCode"] != null && dr["CityGeoCode"].ToString() != "")
                            top.CityGeoCode = dr["CityGeoCode"].ToString().TrimStart().Trim();
                        if (dr["County"] != null && dr["County"].ToString() != "")
                            top.County = dr["County"].ToString().TrimStart().Trim();
                        if (dr["Region"] != null && dr["Region"].ToString() != "")
                            top.Region = dr["Region"].ToString().TrimStart().Trim();
                        if (dr["RegionGeoCode"] != null && dr["RegionGeoCode"].ToString() != "")
                            top.RegionGeoCode = dr["RegionGeoCode"].ToString().TrimStart().Trim();
                        if (dr["State"] != null && dr["State"].ToString() != "")
                            top.State = dr["State"].ToString().TrimStart().Trim();
                        if (dr["Country"] != null && dr["Country"].ToString() != "")
                            top.Country = dr["Country"].ToString().TrimStart().Trim();
                        if (dr["Latitude"] != null && dr["Latitude"].ToString() != "")
                            top.Latitude = Convert.ToDouble(dr["Latitude"]);
                        if (dr["Longitude"] != null && dr["Longitude"].ToString() != "")
                            top.Longitude = Convert.ToDouble(dr["Longitude"]);
                        //Détection des Notes et des AnciennesCommune
                        top.ExtraireNoteToponyme();
                        top.ExtraireNouvelleCommune();
                        ToponymeGeoDb.ListeToponymesGeoDb.Add(top);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Une exeception a été lévée dans la procédure ListerToponymesGeoDB(DataTable dt) : " + ex.Message);
                    }
                }

                ToponymeGeoDb.ListeToponymesGeoDb.Sort();     
            }

    La comparaison se fait avec le code suivant

     listeTrouves = string.IsNullOrEmpty(code) ?
                        ListeToponymesGeoDb.Where(x => string.Equals(x.City.Trim(), topo, StringComparison.CurrentCultureIgnoreCase) && x.Country == country).ToList() :
                        ListeToponymesGeoDb.Where(x => string.Equals(x.City.Trim(), topo, StringComparison.CurrentCultureIgnoreCase) && x.CityGeoCode == code && x.Country == country).ToList();

    Qui renvoit False hors c'est le contraire qui est attendu.

    Pour essayer de détecter le problème j'ai introduit les lignes suivantes:

     

    qui me donnent la sortie suivante

     Debug.Print("-------------------------");
                                Debug.Print(top.City);
                                Debug.Print("Longueur =" + top.City.Length);
                                byte[] asciiBytes = Encoding.ASCII.GetBytes(top.City);
                                string s = "";
                                foreach (var c in asciiBytes)
                                {
                                    s += c + " ";
                                }
                                Debug.Print(s);
                                s = "";
                                foreach (var l in top.City)
                                {
                                    s += "  " + l;
                                }
                                Debug.Print(s);

                                Debug.Print("-------------------------");
                                Debug.Print(topo);
                                Debug.Print("Longueur =" + topo.Length);
                                byte[] asciiByte2 = Encoding.ASCII.GetBytes(topo);
                                s = "";
                                foreach (var c in asciiByte2)
                                {
                                    s += c + " ";
                                }
                                Debug.Print(s);
                                s = "";
                                foreach (var l in topo)
                                {
                                    s += "  " + l;
                                }
                                Debug.Print(s);
                                Debug.Print((topo == top.City).ToString());

    qui me donne la sortie suivante:

    -------------------------
    Grandes-Bergeronnes {Les Bergeronnes}
    Longueur =37
    71 114 97 110 100 101 115 45 66 101 114 103 101 114 111 110 110 101 115 32 123 76 101 115 63 66 101 114 103 101 114 111 110 110 101 115 125 
      G  r  a  n  d  e  s  -  B  e  r  g  e  r  o  n  n  e  s     {  L  e  s     B  e  r  g  e  r  o  n  n  e  s  }
    -------------------------
    Grandes-Bergeronnes {Les Bergeronnes}
    Longueur =37
    71 114 97 110 100 101 115 45 66 101 114 103 101 114 111 110 110 101 115 32 123 76 101 115 32 66 101 114 103 101 114 111 110 110 101 115 125 
      G  r  a  n  d  e  s  -  B  e  r  g  e  r  o  n  n  e  s     {  L  e  s     B  e  r  g  e  r  o  n  n  e  s  }
    False

    OU l'on voit que le 63 de la première chaine n'affiche pas un ? mais bien un espace ??

    Merci pour votre aide

    Bernard


    Bernard Bouree

    dimanche 3 septembre 2017 09:38
  • Apparemment les données correspondent sans transformation.

    J'ai eu souvent ce problème lorsque je capture des données sur des pages web.

    La seule solution que j'ai trouvée c'est de faire une routine qui converti les données en fonction de leur origine.

    Peut-être que dans ce cas précis on peut modifier la table de codage de caractère lors de la lecture de la base...


    MCh

    dimanche 3 septembre 2017 11:34
  • Bonjour

    Pourquoi le caractère codé 63 n'affiche pas un ?

    Bernard


    Bernard Bouree

    lundi 4 septembre 2017 08:39
  • Bonjour

    Personne n'a la réponse ?

    Pourquoi un caractère codé ASCII 63 affiche un espace au lieu de ?

    Bernard


    Bernard Bouree

    vendredi 8 septembre 2017 19:13
  • Bonjour,

    Pourquoi ne pas faire un "replace" sur la valeur 63 ?

    Cordialement,
    TX


    Cordialement,

    jeudi 14 septembre 2017 12:50
  • Bonjour

    J'ai depuis contourné le problème ce que je ne comprends pas c'est pourquoi personne peut m'expliquer la raison qui fait qu'un caractère codé 63 et devrait donc afficher un ? affiche un espace !!

    Bernard


    Bernard Bouree

    jeudi 14 septembre 2017 14:36
  • Bonjour,

    Un problème d'encodage de fichier a l'écriture ?
    Peut être faire des testes avec UTF8, UTF6, et ....


    Cordialement,

    jeudi 14 septembre 2017 15:42