VB6 VBScriptでArraylist

仕事柄未だにVB6を保守することがあるのだが、For eachが使える可変長配列が欲しかったのでVBScript用に作っていたArraylistを移植してみた。「class ArrayList~end class」で囲めばVBScriptでそのまま動く。

ファイル名 Arraylist.cls

Option Explicit
    
    Private m_Item()
    Private m_count

    '末尾にItemを追加
    Public Sub Add(x)
        ReDim Preserve m_Item(m_count)
        If IsObject(x) Then
            Set m_Item(m_count) = x
        Else
            m_Item(m_count) = x
        End If
        m_count = m_count + 1
    End Sub

    'I番目の内容をxで書き換え
    Public Sub Change(I, x)
        If IsObject(x) Then
            Set m_Item(I) = x
        Else
            m_Item(I) = x
        End If
    End Sub

    '総数を返す
    Public Function count()
        count = m_count
    End Function

    '全消去
    Public Function Clear()
        m_count = 0
        Erase m_Item
    End Function

    'For each 用 例 yがArrayListなら For each x in y.item
    Public Function Item()
        Item = m_Item
    End Function

    'n番目のItemを返す
    Public Function Items(n)
        If IsObject(m_Item(n)) Then
            Set Items = m_Item(n)
        Else
            Items = m_Item(n)
        End If
    End Function
    
    'n番目のItemを削除
    Public Sub RemoveAt(n)
        If m_count >= n Then
            Dim I
            For I = n To m_count - 1 - 1
                Call Change(I, Items(I + 1))
            Next I
            m_count = m_count - 1
            ReDim Preserve m_Item(m_count)
        Else
            MsgBox ("引数が範囲外")
        End If
    End Sub

    '引数と同じItemを全て削除
    Public Sub Remove(itm)
        Dim I
        For I = m_count - 1 To 0 Step -1
            If Items(I) = itm Then
                RemoveAt (I)
            End If
        Next I
    End Sub
    
    'ソート
    Public Function Sort()
            
        If m_count = 0 Then
            Exit Function
        End If
            
        Dim I, J, swap
        For I = 0 To m_count - 1
            For J = I To m_count - 1 - 1
                If m_Item(J) > m_Item(J + 1) Then
                    swap = m_Item(J)
                    m_Item(J) = m_Item(J + 1)
                    m_Item(J + 1) = swap
                End If
            Next J
        Next I
    
    End Function

使用例

Private Sub Command1_Click()

    Dim m As New Arraylist

    m.Add (34)
    m.Add (3)
    m.Add (11)
    m.Add (28)
    m.Add (17)
    m.Add (11)
    
    For Each s In m.Item
        Text1.Text = Text1.Text + " " + str$(s)
    Next
    
   m.Remove (11)
   MsgBox (m.count)
   
    For Each s In m.Item
        Text1.Text = Text1.Text + " " + str$(s)
    Next
   
   
   
    For Each s In m.Item
        Text1.Text = Text1.Text + " " + str$(s)
    Next

    m.Sort

    For Each s In m.Item
        Text1.Text = Text1.Text + " " + str$(s)
    Next


End Sub

コンサータ36mgに増量

明日からコンサータ18mg二錠の36mgになる。

ストラテラ80mgからコンサータ18mgに切り替えた時は全く効かなくてミス連発になった。

元々コンサータ18mgは副作用の有無を調べるのが目的で余り効かないらしい。

コンサータ27mgで薬が効いている感じがしてきた。36mgでどんな効果がでるか楽しみ。

後、自立支援の正式な書類が届いた。ストラテラコンサータもとても高い薬なので助かっています。

 

以前薬局でストラテラの数を間違えて処方されたのでしっかり数を確認して受け取った。第一種向精神薬コンサータで数間違いがあったらシャレにならないから。