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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    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 émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    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
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    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 à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    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 émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    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 ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    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

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    sur l'ancien framework 2 il a des chances que ca n'existait pas encore
    sur array il y avait .length(d) qui permettait de connaitre la taille d'une dimension d
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Mon code actuel est le suivant :
    PS:La fonction compare fonctionne bien pour toutes les autre variables une fois modifiées .

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    Option Strict Off
    Option Explicit On
     
    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Serialization
    Imports System.Text
     
    Public Class cMySettings
     
        Public PhoneDebugLog As Boolean
        Public PhoneMacAddress As String
        Public PhoneMacAddress2 As String
        Public RunOnStart As Boolean
        Public PhoneBookUpdate As Boolean
        Public PhoneBookListUpdate As Boolean
        Public PhoneBookList As String
        Public PhoneBookUseSIM As Boolean
        Public SmsServiceCentreAddress As String
        Public EmergencyNumber As String
        Public AutoSwapPhone As Boolean
        Public PhoneSpeechNumbers As String
        Public PhoneSpeechRecognition As Boolean
        Public PhoneCountryCodes() As String  'networkCarrierCode , countryCode As String,  internationalCarrierCode
        Public PhoneAlarm1 As String
        Public PhoneAlarm2 As String
        Public PhoneAlarm3 As String
        Public PhoneAlarm4 As String
        Public PhoneAlarm5 As String
        Public LockInMotion As Boolean
     
        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.PhoneDebugLog = Settings.PhoneDebugLog
            Me.PhoneMacAddress = Settings.PhoneMacAddress
            Me.PhoneMacAddress2 = Settings.PhoneMacAddress2
            Me.RunOnStart = Settings.RunOnStart
            Me.PhoneBookUpdate = Settings.PhoneBookUpdate
            Me.PhoneBookListUpdate = Settings.PhoneBookListUpdate
            Me.PhoneBookList = Settings.PhoneBookList
            Me.PhoneBookUseSIM = Settings.PhoneBookUseSIM
            Me.SmsServiceCentreAddress = Settings.SmsServiceCentreAddress
            Me.EmergencyNumber = Settings.EmergencyNumber
            Me.AutoSwapPhone = Settings.AutoSwapPhone
            Me.PhoneSpeechNumbers = Settings.PhoneSpeechNumbers
            Me.PhoneSpeechRecognition = Settings.PhoneSpeechRecognition
            Me.PhoneCountryCodes = Settings.PhoneCountryCodes
            Me.PhoneAlarm1 = Settings.PhoneAlarm1
            Me.PhoneAlarm2 = Settings.PhoneAlarm2
            Me.PhoneAlarm3 = Settings.PhoneAlarm3
            Me.PhoneAlarm4 = Settings.PhoneAlarm4
            Me.PhoneAlarm5 = Settings.PhoneAlarm5
            Me.LockInMotion = Settings.LockInMotion
     
        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.PhoneDebugLog = SourceSettings.PhoneDebugLog
            DestSettings.PhoneMacAddress = SourceSettings.PhoneMacAddress
            DestSettings.PhoneMacAddress2 = SourceSettings.PhoneMacAddress2
            DestSettings.RunOnStart = SourceSettings.RunOnStart
            DestSettings.PhoneBookUpdate = SourceSettings.PhoneBookUpdate
            DestSettings.PhoneBookListUpdate = SourceSettings.PhoneBookListUpdate
            DestSettings.PhoneBookList = SourceSettings.PhoneBookList
            DestSettings.PhoneBookUseSIM = SourceSettings.PhoneBookUseSIM
            DestSettings.SmsServiceCentreAddress = SourceSettings.SmsServiceCentreAddress
            DestSettings.EmergencyNumber = SourceSettings.EmergencyNumber
            DestSettings.AutoSwapPhone = SourceSettings.AutoSwapPhone
            DestSettings.PhoneSpeechNumbers = SourceSettings.PhoneSpeechNumbers
            DestSettings.PhoneSpeechRecognition = SourceSettings.PhoneSpeechRecognition
            For i As Integer = 0 To 2
                DestSettings.PhoneCountryCodes(i) = SourceSettings.PhoneCountryCodes(i)
            Next
            DestSettings.PhoneAlarm1 = SourceSettings.PhoneAlarm1
            DestSettings.PhoneAlarm2 = SourceSettings.PhoneAlarm2
            DestSettings.PhoneAlarm3 = SourceSettings.PhoneAlarm3
            DestSettings.PhoneAlarm4 = SourceSettings.PhoneAlarm4
            DestSettings.PhoneAlarm5 = SourceSettings.PhoneAlarm5
            DestSettings.LockInMotion = SourceSettings.LockInMotion
     
        End Sub
     
        Public Shared Sub SetToDefault(ByRef Settings)
            Settings.PhoneDebugLog = False
            Settings.PhoneMacAddress = "01:02:03:04:05:06"
            Settings.PhoneMacAddress2 = "07:08:09:10:11:12"
            Settings.RunOnStart = True
            Settings.PhoneBookUpdate = True
            Settings.PhoneBookListUpdate = True
            Settings.PhoneBookList = "PB,ICH,OCH,MCH,CCH"
            Settings.PhoneBookUseSIM = False
            Settings.SmsServiceCentreAddress = "0102030405"
            Settings.EmergencyNumber = "112"
            Settings.AutoSwapPhone = False
            Settings.PhoneSpeechNumbers = "zero,one,two,three,four,five,six,seven,eight,nine,more,star,sharp,delete,cancel,call,stop call,help call,by name,-,-,-"
            Settings.PhoneSpeechRecognition = False
            Settings.PhoneCountryCodes = {"0", "33", "00"}
            Settings.PhoneAlarm1 = """01:00""|1|1|""Alarm Text 1""|""1"""
            Settings.PhoneAlarm2 = """02:00""|2|1|""Alarm Text 2""|""1,2"""
            Settings.PhoneAlarm3 = """03:00""|3|1|""Alarm Text 3""|""1,2,3"""
            Settings.PhoneAlarm4 = """04:00""|4|1|""Alarm Text 4""|""1,2,3,4"""
            Settings.PhoneAlarm5 = """05:00""|5|1|""Alarm Text 5""|""1,2,3,4,5"""
            Settings.LockInMotion = True
     
        End Sub
     
        Public Shared Function Compare(ByRef Settings1 As cMySettings, ByRef Settings2 As cMySettings) As Boolean
     
            If Settings1.PhoneDebugLog <> Settings2.PhoneDebugLog Then Return False
            If Settings1.PhoneMacAddress <> Settings2.PhoneMacAddress Then Return False
            If Settings1.PhoneMacAddress2 <> Settings2.PhoneMacAddress2 Then Return False
            If Settings1.RunOnStart <> Settings2.RunOnStart Then Return False
            If Settings1.PhoneBookUpdate <> Settings2.PhoneBookUpdate Then Return False
            If Settings1.PhoneBookListUpdate <> Settings2.PhoneBookListUpdate Then Return False
            If Settings1.PhoneBookList <> Settings2.PhoneBookList Then Return False
            If Settings1.PhoneBookUseSIM <> Settings2.PhoneBookUseSIM Then Return False
            If Settings1.SmsServiceCentreAddress <> Settings2.SmsServiceCentreAddress Then Return False
            If Settings1.EmergencyNumber <> Settings2.EmergencyNumber Then Return False
            If Settings1.AutoSwapPhone <> Settings2.AutoSwapPhone Then Return False
            If Settings1.PhoneSpeechNumbers <> Settings2.PhoneSpeechNumbers Then Return False
            If Settings1.PhoneSpeechRecognition <> Settings2.PhoneSpeechRecognition Then Return False
            If Settings1.PhoneAlarm1 <> Settings2.PhoneAlarm1 Then Return False
            If Settings1.PhoneAlarm2 <> Settings2.PhoneAlarm2 Then Return False
            If Settings1.PhoneAlarm3 <> Settings2.PhoneAlarm3 Then Return False
            If Settings1.PhoneAlarm4 <> Settings2.PhoneAlarm4 Then Return False
            If Settings1.PhoneAlarm5 <> Settings2.PhoneAlarm5 Then Return False
            If Settings1.LockInMotion <> Settings2.LockInMotion Then Return False
     
            'If Not Settings1.PhoneCountryCodes.count = Settings2.PhoneCountryCodes.Length Then
            '    Return False
            'End If
     
            For i As Integer = 0 To 2
                If Not String.Compare(Settings1.PhoneCountryCodes(i), Settings2.PhoneCountryCodes(i)) = 0 Then
                    Return False
                End If
            Next
     
            Return True
        End Function
     
    End Class

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    sur l'ancien framework 2 il a des chances que ca n'existait pas encore
    sur array il y avait .length(d) qui permettait de connaitre la taille d'une dimension d
    Heu, je travaille sur VB.NET 2010 framework 3.5 car je suis toujours sous Vista 32bits

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Lorsque le tableau est le suivant {"0","33",00"}

    Si je test ces commands:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TempPluginSettings.PhoneCountryCodes(1) = "44"
    MessageBox.Show(PluginSettings.PhoneCountryCodes(1) & "  " & TempPluginSettings.PhoneCountryCodes(1))
    Je devrais avoir un message avec : 33 44
    Or j'obtiens : 44 44

  11. #11
    Membre émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Par ce que à un endroit (constructeur, ou copie ou autre) tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.PhoneCountryCodes = Settings.PhoneCountryCodes
    Et de la même manière que tu ne pouvais pas tester si ces tableaux se valent... On ne peut pas copier un tableau ainsi.

    Il faut faire une boucle, lire les valeurs et les recréer dans l'autre.

    Sinon, tu fais juste un truc :

    Le tableau d'objet1, pointe sur le tableau de objet2
    le = en objet pointe sur la référence !!!
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Par ce que à un endroit (constructeur, ou copie ou autre) tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.PhoneCountryCodes = Settings.PhoneCountryCodes
    Et de la même manière que tu ne pouvais pas tester si ces tableaux se valent... On ne peut pas copier un tableau ainsi.

    Il faut faire une boucle, lire les valeurs et les recréer dans l'autre.

    Sinon, tu fais juste un truc :

    Le tableau d'objet1, pointe sur le tableau de objet2
    le = en objet pointe sur la référence !!!
    Dans la fonction New j'ai testé une boucle for qui me génère l'erreur:
    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
        Public Sub New(ByRef Settings As cMySettings)
            Me.PhoneDebugLog = Settings.PhoneDebugLog
            Me.PhoneMacAddress = Settings.PhoneMacAddress
            Me.PhoneMacAddress2 = Settings.PhoneMacAddress2
            Me.RunOnStart = Settings.RunOnStart
            Me.PhoneBookUpdate = Settings.PhoneBookUpdate
            Me.PhoneBookListUpdate = Settings.PhoneBookListUpdate
            Me.PhoneBookList = Settings.PhoneBookList
            Me.PhoneBookUseSIM = Settings.PhoneBookUseSIM
            Me.SmsServiceCentreAddress = Settings.SmsServiceCentreAddress
            Me.EmergencyNumber = Settings.EmergencyNumber
            Me.AutoSwapPhone = Settings.AutoSwapPhone
            Me.PhoneSpeechNumbers = Settings.PhoneSpeechNumbers
            Me.PhoneSpeechRecognition = Settings.PhoneSpeechRecognition
            For i As Integer = 0 To 2
                Me.PhoneCountryCodes(i) = Settings.PhoneCountryCodes(i)
            Next
            Me.PhoneAlarm1 = Settings.PhoneAlarm1
            Me.PhoneAlarm2 = Settings.PhoneAlarm2
            Me.PhoneAlarm3 = Settings.PhoneAlarm3
            Me.PhoneAlarm4 = Settings.PhoneAlarm4
            Me.PhoneAlarm5 = Settings.PhoneAlarm5
            Me.LockInMotion = Settings.LockInMotion
    
        End Sub
    Sub New Catch - La référence d'objet n'est pas définie à une instance d'un objet !

  13. #13
    Membre émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu es sur la bonne voie.

    Ton tableau est OBJET... (c'est pour ça qu'on ne peut pas le copier avec un =, ni le comparer)

    Donc bonne piste de boucler sur les valeurs.... Mais il ne faut pas oublier de le crée (instancier) ce tableau... Et le mettre à la bonne taille.

    tu peux le faire via le type tableau de String....
    Mais entre nous, c'est un peu dépasser. il faut regarder la taille, lui mettre la bonne taille etc...
    (Ca peut se faire)

    Mais moi, à ta place j'aurai créer un : List (Of String)

    Donc dans le constructeur tu commences par faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.PhoneCountryCodes = New List(Of String)
    Puis plus loin, quand tu copies les valeurs, (nouvelle technologie), tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each element as String in Settings.PhoneCountryCodes
          Me.PhoneCountryCodes.Add(element)
    Next
    Du coup pas besoin de gérer la taille ni rien.

    Pour la méthode de comparaison, comme avant, ça ne change pas de méthode d'accès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     For i As Integer = 0 To 2
                If Not String.Compare(Settings1.PhoneCountryCodes(i), Settings2.PhoneCountryCodes(i)) = 0 Then
                    Return False
                End If
     Next
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    j'héistais à préciser que ce type code date de vb6
    de nos jours en .net on peut remplacer tes 200 lignes de code par moins de 10, donc lire un petit cours pour se mettre à niveau ne serait pas plus mal je pense
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    j'héistais à préciser que ce type code date de vb6
    de nos jours en .net on peut remplacer tes 200 lignes de code par moins de 10, donc lire un petit cours pour se mettre à niveau ne serait pas plus mal je pense
    Sur la base du code du post 8, si vous avez un code plus simple , je suis preneur !

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Je ne vois pas comment intégrer dans copy le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each element as String in Settings.PhoneCountryCodes
          Me.PhoneCountryCodes.Add(element)
    Next
    Dans le constructeur, j'ai ajouté le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.PhoneCountryCodes = New List(Of String)
    J'obtiens l'erreur:
    Imossible de convertir une valeur de type List(Of String) en un tableau à 1 dimension !
    PS: J'ai laissé en début de classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public PhoneCountryCodes() As String

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Au début de la classe , j'ai remplacé :
    Public PhoneCountryCodes() As String
    par
    Public PhoneCountryCodes As List(Of String)

    Du coup, je n'ai plus d'erreur dans la fonction New !

    Mais je ne sais pas quoi mettre dans la fonction copy !

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par pierrotm777 Voir le message
    Sur la base du code du post 8, si vous avez un code plus simple , je suis preneur !
    surement, mais je ne suis pas là pour faire votre boulot, le boulot d'un développeur ce n'est pas seulement de cracher du code, il faut souvent renouveler ses connaissances ...

    Citation Envoyé par Pol63 Voir le message
    lire un petit cours pour se mettre à niveau ne serait pas plus mal je pense
    ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Pour la fonction copy, tu aurais pu y arriver en prenant exemple sur la première boucle For Each...
    Avec les listes de type List(Of ), c'est facile, pour ajouter un élément, tu utilises Add().
    Pour lire les éléments, tu as les boucles, for, for each, while... Comme d'hab

    Tu avais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For i As Integer = 0 To 2
                DestSettings.PhoneCountryCodes(i) = SourceSettings.PhoneCountryCodes(i)
     Next


    En utilisant la même Boucle for, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For i As Integer = 0 To 2
                DestSettings.PhoneCountryCodes.Add(SourceSettings.PhoneCountryCodes(i))
     Next
    For each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Element as String in SourceSettings.PhoneCountryCodes
        DestSettings.PhoneCountryCodes.Add(Element)
    Next
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 51
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    surement, mais je ne suis pas là pour faire votre boulot, le boulot d'un développeur ce n'est pas seulement de cracher du code, il faut souvent renouveler ses connaissances ...



    ...
    Je ne demande pas que l'on me fasse le boulot, mais juste me donner un lien précis où une idée de comment avancer !
    Me mettre à jour , je le fais tous les jours !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

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

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