tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 構造体をCSVへ出力の件
投稿日: 2016/02/01(Mon) 16:52
投稿者shu
構造体を提示された状態で定義した場合、希望の実装は困難かと思います。

各項目の値をString配列とかList(Of String)などで格納するようにして
おけばループさせることが可能なので実装しやすくなるかと思います。

構造体 実装例)
    Public Structure StXyz
        Public Enum Column
            Key
            Name
            Address
            NickName
            Memo
            Count
        End Enum

        Private _Initialized As Boolean
        Private _Values() As String

        Public Sub Init()
            _Values = Enumerable.Range(0, Column.Count).Select(Function(x) "").ToArray()
            _Initialized = True
        End Sub

        Public Property Values() As String()
            Get
                If Not _Initialized Then
                    Init()
                End If
                Return _Values
            End Get
            Set(value() As String)
                _Initialized = True
                Dim CopyValue = value
                _Values = Enumerable.Range(0, Column.Count).Select(
                           Function(x) If(x < CopyValue.Length, CopyValue(x), "")).ToArray()
            End Set
        End Property

        Public Property Key As String
            Get
                Return Values(Column.Key)
            End Get
            Set(value As String)
                Values(Column.Key) = value
            End Set
        End Property

        Public Property Name As String
            Get
                Return Values(Column.Name)
            End Get
            Set(value As String)
                Values(Column.Name) = value
            End Set
        End Property
・・・
各メンバ分プロパティ化
・・・

    End Structure


使い方:
        '--- 実装例だとInitを呼ばないと各値への設定不可、プロパティの中でInitするような仕組み
        '--- にすれば使うときに省略することも可
        Dim a As New StXyz()
        a.Init()
        a.Key = "key1"
        a.Name = "Name1"

        '--- 文字列配列により各値を渡すことが出来る
        Dim b As New StXyz()
        b.Values = {"key2", "name2", "Address2", "NickName2", "Memo2"}

        '--- メンバ数が不足している配列を渡した場合、後ろのメンバは空文字列が設定される
        Dim c As New StXyz()
        c.Values = {"key3", "Name3"}


a,b,c共Valuesにより順番に項目値にアクセスが可能なので希望の処理が可能かと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。