vCard Reader Class

Imports System.IO
Public Class vCardReader
#Region "Define"
    Public vCards As vCard()
#End Region
#Region "Subs"

    Sub New(ByVal vCardFileStream As FileStream)
        DecodeVCardFromFileStream(vCardFileStream)
    End Sub

    Private Function Split(ByVal Content As String) As CardProperty
        Dim CardProperty As CardProperty
        Dim PropertyAndParametreString As String = Content.Split(":")(0)
        Dim ValueString As String = Content.Split(":")(1)
        Dim Temp As String() = PropertyAndParametreString.Split(";")
        CardProperty.Name = Temp(0)
        If Temp.Length > 1 Then
            ReDim CardProperty.Parametres(Temp.GetUpperBound(0) - 1)
            Temp.Copy(Temp, 1, CardProperty.Parametres, 0, Temp.Length - 1)
        Else
            CardProperty.Parametres = Nothing
        End If
        CardProperty.Values = ValueString.Split(";")
        Return CardProperty
    End Function

    Public Sub DecodeVCardFromFileStream(ByVal vCardFileStream As FileStream)
        Dim Reader As New StreamReader(vCardFileStream)
        ReDim vCards(0)
        Dim CurrentVcard As Integer
        Do
            'Search for vCard
            ReDim vCards(CurrentVcard).Properties(-1)
            If InStr(Reader.ReadLine, "BEGIN:VCARD") Then
                'Start Processing vCard object
                Dim Content As String
                Dim cardProperty As CardProperty
                Do
                    Content = Reader.ReadLine
                    If Content = "END:VCARD" Then Exit Do
                    'The "=" in then end of a stream indicates message is not complete. Read next line and contact them.
                    Do

                        If Content.LastIndexOf("=") = Content.Length - 1 Then
                            Content = Content.Substring(0, Content.Length - 2) + Reader.ReadLine
                        Else : Exit Do
                        End If
                    Loop
                    'Split properties , parametres and values.
                    cardProperty = Split(Content)
                    Dim PropertyNumber As Integer = vCards(CurrentVcard).Properties.Length
                    ReDim Preserve vCards(CurrentVcard).Properties(PropertyNumber)
                    vCards(CurrentVcard).Properties(PropertyNumber) = cardProperty
                Loop
            End If
            If Reader.Peek() < 0 Then
                Return
            End If
            CurrentVcard += 1
            ReDim Preserve vCards(CurrentVcard)
        Loop
    End Sub
#End Region

#Region "Structures"
    Public Structure vCard
        Public Properties As CardProperty()
    End Structure

    Public Structure CardProperty
        Public Name As String
        Public Parametres() As String
        Public Values() As String
    End Structure

#End Region

End Class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值