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 de deux variables tabbleau


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Par défaut Comparaison de deux variables tabbleau
    Bonjour,
    J'utilise une classe qui crée un fichier xml utilisé comme fichier de configuration .
    Voici la class:
    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
    Option Strict Off
    Option Explicit On
     
    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Serialization
    Imports System.Text
     
    Public Class cMySettings
     
        Public PhoneCountryCodes() As String
     
        Private Shared XMLFilename As String
     
        Public Sub New()
            SetToDefault(Me)
        End Sub
     
        Public Sub New(FileName As String)
            XMLFilename = FileName
            If Path.GetExtension(XMLFilename).ToLower() <> "xml" Then XMLFilename = XMLFilename + ".xml"
            If File.Exists(XMLFilename) = False Then SerializeToXML(New cMySettings())
        End Sub
     
        Public Sub New(ByRef Settings As cMySettings)
            Me.PhoneCountryCodes = Settings.PhoneCountryCodes
     
        End Sub
     
        Public Shared Sub SerializeToXML(ByRef Settings As cMySettings)
     
            Dim xmlSerializer As New XmlSerializer(GetType(cMySettings))
     
            Using xmlTextWriter As New XmlTextWriter(XMLFilename, Encoding.UTF8)
                xmlTextWriter.Formatting = Formatting.Indented
                xmlSerializer.Serialize(xmlTextWriter, Settings)
                xmlTextWriter.Close()
            End Using
     
     
        End Sub
     
        Public Shared Sub DeseralizeFromXML(ByRef Settings As cMySettings)
     
            Dim fs As FileStream = Nothing
     
            ' do i have settings?
            If File.Exists(XMLFilename) = True Then
                Try
                    fs = New FileStream(XMLFilename, FileMode.Open, FileAccess.Read)
                    Dim xmlSerializer As New XmlSerializer(GetType(cMySettings))
                    Settings = xmlSerializer.Deserialize(fs)
                Catch
                    'load error of some sort, or OBJECT deserialize error
                    'do we tell anyone?
                    Exit Sub
                Finally
                    If Not fs Is Nothing Then fs.Close()
                    fs = Nothing
                End Try
            End If
     
        End Sub
     
        Public Shared Sub Copy(ByRef SourceSettings As cMySettings, ByRef DestSettings As cMySettings)
            DestSettings.PhoneCountryCodes = SourceSettings.PhoneCountryCodes
     
        End Sub
     
        Public Shared Sub SetToDefault(ByRef Settings)
            Settings.PhoneCountryCodes = {"0", "33", "00"}
        End Sub
     
        Public Shared Function Compare(ByRef Settings1 As cMySettings, ByRef Setting2 As cMySettings) As Boolean
            If Settings1.PhoneCountryCodes IsNot Setting2.PhoneCountryCodes Then Compare = False : Exit Function
    	'If Settings1.PhoneCountryCodes(0) <> Setting2.PhoneCountryCodes(0) Then Compare = False : Exit Function
            'If Settings1.PhoneCountryCodes(1) <> Setting2.PhoneCountryCodes(1) Then Compare = False : Exit Function
            'If Settings1.PhoneCountryCodes(2) <> Setting2.PhoneCountryCodes(2) Then Compare = False : Exit Function
     
            Compare = True
     
        End Function
     
    End Class
    Je l'initialise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Dim PluginSettings As cMySettings
        Dim TempPluginSettings As cMySettings
     
    ...
     
    '''''''''''''''''
            ''' Settings  '''
            '''''''''''''''''
            PluginSettings = New cMySettings(Path.Combine(pluginDataPath, "MobilePhone"))
            ' read in defaults
            cMySettings.DeseralizeFromXML(PluginSettings)
     
            ' copy to temp
            TempPluginSettings = New cMySettings(PluginSettings)
    Je veux modifier la valeur 33 par défaut !
    J'écrais donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TempPluginSettings.PhoneCountryCodes(1) = "44"
                    If cMySettings.Compare(PluginSettings, TempPluginSettings) = False Then
                        cMySettings.Copy(TempPluginSettings, PluginSettings)
                        cMySettings.SerializeToXML(PluginSettings)
                    End If
    Il semblerait que la fonction compare ne fonctionne pas avec des variables tableau !

    Merci de votre aide !

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Settings1.PhoneCountryCodes IsNot Setting2.PhoneCountryCodes Then Compare = False : Exit Function
    Ce serait trop beau que ceci fonctionne.

    VB.NET est OBJET, donc quand tu fais IsNot entre deux objets, il regarde, si ces objets sont en fait le même par référence.
    Ce qui n'est pas le cas évidemment. Donc il renverra toujours faux.

    Il faut donc dans ta procédure compare faire un truc à la main.

    Et soit dit en passant, toi, tu dois venir du VB6, voir c++...

    Parenthèse :

    Mettre la valeur de retour dans le nom de la fonction, n'est plus utilisé, plutôt utiliser des Return, et du coup pas de Exit Fonction....

    Et faire tenir plusieurs traitement sur une seule ligne ce n'est pas un objectif, et rends le code pas claire, de mon point de vue.
    Et ça ne prends pas plus de place une fois le code compilé.


    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
    Public Shared Function Compare(ByRef Settings1 As cMySettings, ByRef Setting2 As cMySettings) As Boolean
     
            If not Settings1.PhoneCountryCodes.Count =  Setting2.PhoneCountryCodes.Count Then 
                 Return False
            End If
     
           For i as Integer = 0 To Settings1.PhoneCountryCodes.Count - 1
     
               If not String.Compare(Settings1.PhoneCountryCodes(i), Setting2.PhoneCountryCodes(i))=0 Then
                  Return False
               End If
     
           Next
     
           Return True
     
        End Function

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Par défaut
    Merci beaucoup , je vais tester cette solution !

    C'est en fait une class que j'avais récupéré d'un collègue .
    En général je l'utilise qu'avec des variables type integer ou string ou boolean .
    J'utilise toujours les return , enfin en général !

    Je vais simplifier ce code en tenant compte de votre conseil !

    Merci de votre aide,
    Pierre

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Par défaut
    .Count génère une erreur !
    J'ai donc testé ce code mais sans succès pour les variables tableaux !
    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
        Public Shared Function Compare(ByRef Settings1 As cMySettings, ByRef Setting2 As cMySettings) As Boolean
     
            If Settings1.PhoneDebugLog <> Setting2.PhoneDebugLog Then Return False
            If Settings1.PhoneMacAddress <> Setting2.PhoneMacAddress Then Return False
            If Settings1.PhoneMacAddress2 <> Setting2.PhoneMacAddress2 Then Return False
            If Settings1.RunOnStart <> Setting2.RunOnStart Then Return False
            If Settings1.PhoneBookUpdate <> Setting2.PhoneBookUpdate Then Return False
            If Settings1.PhoneBookListUpdate <> Setting2.PhoneBookListUpdate Then Return False
            If Settings1.PhoneBookList <> Setting2.PhoneBookList Then Return False
            If Settings1.PhoneBookUseSIM <> Setting2.PhoneBookUseSIM Then Return False
            If Settings1.SmsServiceCentreAddress <> Setting2.SmsServiceCentreAddress Then Return False
            If Settings1.EmergencyNumber <> Setting2.EmergencyNumber Then Return False
            If Settings1.AutoSwapPhone <> Setting2.AutoSwapPhone Then Return False
            If Settings1.PhoneSpeechNumbers <> Setting2.PhoneSpeechNumbers Then Return False
            If Settings1.PhoneSpeechRecognition <> Setting2.PhoneSpeechRecognition Then Return False
            If Settings1.PhoneAlarm1 <> Setting2.PhoneAlarm1 Then Return False
            If Settings1.PhoneAlarm2 <> Setting2.PhoneAlarm2 Then Return False
            If Settings1.PhoneAlarm3 <> Setting2.PhoneAlarm3 Then Return False
            If Settings1.PhoneAlarm4 <> Setting2.PhoneAlarm4 Then Return False
            If Settings1.PhoneAlarm5 <> Setting2.PhoneAlarm5 Then Return False
            If Settings1.LockInMotion <> Setting2.LockInMotion Then Return False
     
            'If Not Settings1.PhoneCountryCodes.Length = Setting2.PhoneCountryCodes.Length Then
            '    Return False
            'End If
     
            For i As Integer = 0 To Settings1.PhoneCountryCodes.Length - 1
                If Not String.Compare(Settings1.PhoneCountryCodes(i), Setting2.PhoneCountryCodes(i)) = 0 Then
                    Return False
                End If
            Next
     
            Return True
        End Function
    J'ai commenté le premier if car dans mon cas, le tableau a toujours la même dimension !

  5. #5
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Quand tu passes au pas-à-pas dans la boucle qui vérifie les valeurs du tableau...

    Ca dis quoi ? il compare bien toutes les valeurs ? Et quand tu passes la souris au dessus des deux valeurs, cela est il confirmé ?

    (Utilise les points d'arrêts, puis F10, et éventuellement des espions, comme ça tu vois en direct où ça ne va pas).

    PS: D'ailleurs c'est bizarre que Count génère une erreur... Quelle est elle ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    PS: D'ailleurs c'est bizarre que Count génère une erreur... Quelle est elle ?
    Count n'est pas membre de System.Array

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de deux variables.
    Par yann123456 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/03/2010, 16h38
  2. Comparaison entre deux variables avec if
    Par sbouchaibi dans le forum ASP
    Réponses: 1
    Dernier message: 04/03/2010, 12h27
  3. Réponses: 2
    Dernier message: 10/04/2009, 14h34
  4. Comparaison entre deux variables
    Par BHMath76 dans le forum ASP
    Réponses: 5
    Dernier message: 10/10/2008, 11h44
  5. Comparaison entre deux variables
    Par delavega dans le forum ASP
    Réponses: 8
    Dernier message: 23/11/2006, 16h42

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