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
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