2017-11-09 8 views
2

私は、ユーザーが文字とその統計を作成、削除、検索できる「ロボット戦争」タイプのコードを作っています。私が文字を作成するとき、私はプログラムが閉じられた後でもその文字を使用できるようにしたい。これを行う方法はありますか? 2次元配列を保存するにはどうすればよいですか?

Dim characters(10,4) As String 
'name , attack , defense , health 
Private Sub ExtractInfo() 
    characters(1, 1) = "Terminus" 
    characters(1, 2) = "72" 
    characters(1, 3) = "14" 
    characters(1, 4) = "200" 
    characters(2, 1) = "Sir Kill-a-lot" 
    characters(2, 2) = "60" 
    characters(2, 3) = "30" 
    characters(2, 4) = "250" 

は、しかし、私は両方ここに情報が欲しい情報は、コードの実行が停止した後も使用するために保存されるように追加しました:私はちょうど今プライベートサブで配列を宣言しています。

+3

@muffiこの質問はVB.NETについてVBA – MatSnow

+0

ではありません。ファイルの代わりにストリームを使用することは問題ありません。 – muffi

+2

@muffi _not too far_これは同じではないことを意味します。提案された質問が重複していないことを意味する。 – MatSnow

答えて

2

バイナリデータを保存/ロードする方法の1つは、Serializationです。
複雑ではないオブジェクトリレーションに対して実装するのは簡単です。

したがって、基本的にクラスを作成し、<Serializable>属性で装飾します。 適切なBinaryFormatter.SerializeまたはBinaryFormatter.Deserializeメソッドを呼び出すと、すべての(パブリック)メンバーがシリアライズ/デシリアライズされます。

例:

<Serializable> 
    Public Class Characters 
    Public characters(10, 4) As String 
    Public Sub Save(path As String) 
     serialize(path) 
    End Sub 

    Public Shared Function Load(path As String) As Characters 
     Return deSerialize(path) 
    End Function 

    Private Sub serialize(path As String) 
     Try 
      Using fs As Stream = New FileStream(path, FileMode.OpenOrCreate) 
       Dim bf As New BinaryFormatter 
       bf.Serialize(fs, Me) 
      End Using 
     Catch ex As Exception 
      'Error handling 
     End Try 
    End Sub 

    Private Shared Function deSerialize(path As String) As Characters 
     Try 
      Using fs As Stream = New FileStream(path, FileMode.OpenOrCreate) 
       Dim bf As New BinaryFormatter 
       deSerialize = CType(bf.Deserialize(fs), Characters) 
      End Using 
      Return deSerialize 
     Catch ex As Exception 
      'Error handling 
     End Try 
    End Function 

End Class 

使用方法:これら二つの言語が離れすぎていない@MatSnow

Sub Main() 
    Dim a = New Characters() 
    a.characters(0, 0) = "Stack" 
    a.characters(0, 1) = "Overflow" 
    a.characters(1, 0) = "Is" 
    a.characters(1, 1) = "awesome!" 

    a.Save("E:\characters.sav") 

    Dim b = Characters.Load("E:\characters.sav") 
    Console.WriteLine(b.characters(0, 0)) 
    '-> Stack 
    Console.ReadLine() 
End Sub 
関連する問題