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 :

"Stocker" un tableau à 2 dimensions [Débutant]


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut "Stocker" un tableau à 2 dimensions
    Bonjour, Bonsoir!

    Voici mon problème :

    Je possède un tableau multidimensionnel, de deux dimensions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Module Module1
     
    Public MyArray(47, 0) As String
     
    End Module
    Ce tableau est "dynamique", (exemple : MyArray(47, ∞) )

    Et il contient aussi bien des chiffres, que des lettres.

    Voici mon problème :

    J'aimerais que lors de la fermeture de ma form, lors de l'arrêt de mon programme, ce tableau stock ses valeurs quelque part et lors de la re-éxecution de mon programme il les reprennent.

    Une personne dont j'ai oublié le nom (excuse moi) sur le chat du site m'a conseillé d'aller voir du côté de la sérialisation.

    Chose dite chose faite, problème.

    Comment sérialiser un tableau à deux dimensions ?

    J'ai essayé ceci :

    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
     
    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    Module Module 1
     
        Public MyArray(47, 0) As String
     
        Public Sub Keep()
            Dim f As New BinaryFormatter()
            Dim fs As New FileStream("File.bin", FileMode.Create)
            f.Serialize(fs, MyArray)
            fs.Close()
        End Sub
     
        Public Sub Going()
            Dim fs As New FileStream("File.bin", FileMode.Open)
            Dim f As New BinaryFormatter
            Dim Dw(,) As String = f.Deserialize(fs)
            fs.Close()
            MyArray = Dw
        End Sub
    End Module
    Mais bien sûr ça ne fonctionne pas :/ Du moins je récupère bien mes informations dans mon fichier mais lorsqu'il s'agit de les récupéré c'est plus complexe.
    J'ai trouvé sur Internet des personnes qui Sérialiser leur tableau à 2 dimensions mais qui ne le stocker pas fin à ce que j'ai cru comprendre.

    Voici le fameux code :

    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
     
    	Imports System.IO
    	Imports System.Runtime.Serialization.Formatters
    	Module Module1
    	    Sub Main()
    	        Dim rnd As New Random
    	        Dim intArr(5, 5) As Int32
    	        For i As Int32 = 0 To 5
    	            For j As Int32 = 0 To 5
    	                intArr(i, j) = rnd.Next(10, 100)
    	            Next
    	        Next
                    Dim f As New Binary.BinaryFormatter()
    	        Dim ms As New MemoryStream()
    	        f.Serialize(ms, intArr)
    	        Dim byArr As Byte() = ms.ToArray()
    	        Dim str_b64 As String = Convert.ToBase64String(byArr)
    	        Dim ms2 As New MemoryStream(Convert.FromBase64String(str_b64))
    	        Dim intArr2(,) As Int32 = f.Deserialize(ms2)
    	    End Sub
    	End Module
    Source : http://www.dreamincode.net/forums/to...nsional-array/

    Je viens donc ici vous posez ces questions :

    Sérialiser/De-sérialiser mon tableau est - elle la meilleur solution ?

    Dois-je remplacer mon tableau par une classe ?

    Binaire ou XML ? si il y a Sérialisation/De-sérialisation.

    J'espère avoir été assez clair/compréhensible ^^'

    Merci.

    Bonne journée, soirée, nuitée...
    Dernière modification par DotNetMatt ; 29/08/2015 à 15h46. Motif: Orthographe (titre)

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Avec un arraylist comme intermediaire on peut serialiser en format binaire n'importe quoi(bitmap,array,objet list(of object) ....
    voici l'exemple :
    - le bouton 1 redimensionne aleatoirement ton array ,l'affiche dans le textbox1 et le serialize dans un fichier "array.bin"

    - le bouton 2 le "rehydrate" depuis le fichier "array.bin" et l'affiche dans le textbox2
    code .vb du form:
    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
     
     
    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    Imports System.Text
     
    Public Class Form1
        Public MyArray(47, 0) As String
        Private rnd As New Random
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim n As Integer = rnd.Next(0, 20)
            MyArray = New String(47, n) {}
            FillArray()
            DisplayArray(TextBox1)
            Keep()
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Rehydrate()
            DisplayArray(TextBox2)
        End Sub
        Public Sub FillArray()
            For i As Integer = 0 To MyArray.GetUpperBound(0)
                For j As Integer = 0 To MyArray.GetUpperBound(1)
                    MyArray(i, j) = rnd.Next(0, 200)
                Next
            Next
        End Sub
     
        Public Sub Keep()
            Dim olist As New ArrayList
            olist.Add(MyArray)
            Using fs As New FileStream(Application.StartupPath + "\Array.bin", FileMode.Create)
                Dim b As New BinaryFormatter()
                b.Serialize(fs, olist)
                fs.Close()
            End Using
     
        End Sub
        Public Sub Rehydrate()
            Dim olist As ArrayList = Nothing
     
            Using fs As New FileStream(Application.StartupPath + "\Array.bin", FileMode.Open)
                Dim b As New BinaryFormatter()
                olist = CType(b.Deserialize(fs), ArrayList)
                fs.Close()
            End Using
            MyArray = CType(olist(0), String(,))
     
        End Sub
     
        Public Sub DisplayArray(ByVal tbox As TextBox)
            Dim sb As New StringBuilder
            tbox.Clear()
            For i As Integer = 0 To MyArray.GetUpperBound(0)
                For j As Integer = 0 To MyArray.GetUpperBound(1)
                    sb.Append(MyArray(i, j) + " ; ")
                Next
                sb.AppendLine()
     
            Next
            tbox.Text = sb.ToString
     
        End Sub
     
    End Class
    bon code...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Cool! Merci beaucoup pour l'astuce !
    J'essaye ça des que possible

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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