OK,
here is just my actual Source. One Class parses every Line ParseLine. The Other parse the Gedcom-File ParseGedcom.
How can i optimize this Code (speediness??). I would like to show via Progressbar die Parsing-Progress, how can i implement that?
Any ideas?
Merry Christmas everyone.
[h]ParseLine[/h]
[code]Private a_Level As String
Private a_Line As String
Private a_Tag As String
Private a_Value As String
Private a_XReference As String
Level As String
Get
Return a_Level
End Get
End Property
Tag As String
Get
Return a_Tag
End Get
End Property
Value As String
Get
Return a_Value
End Get
End Property
XReference As String
Get
Return a_XReference
End Get
End Property
Function Get_Int_Level() As Integer
Return CDbl(a_Level)
End Function
Private Function Get_XReference(Text As String) As String
Return Mid(Text, 2, Text.Len-2)
End Function
Private Sub Init()
Dim Tokens() As String = Split(a_Line)
a_Level = Tokens(0)
Select Case Tokens.Ubound
Case 1
a_Tag = Uppercase(Tokens(1))
Case 2
If IsXReference(Tokens(1)) Then
// e.g. “0 @I1@ INDI”
a_Tag = Uppercase(Tokens(2)) a_XReference = Get_XReference(Tokens(1))
Else
If IsXReference(Tokens(2)) Then
// e.g. “1 HUSB @I1@”
a_Tag = Uppercase(Tokens(1))
a_XReference = Get_XReference(Tokens(2))
Else
// e.g. “1 SEX M”
a_Tag = Uppercase(Tokens(1))
a_Value = Tokens(2)
End If
End If
Case Is >= 3
a_Tag = Uppercase(Tokens(1))
For i As Integer = 2 To Tokens.Ubound
a_Value = a_Value + " " + Tokens(i)
Next
a_Value = Trim(a_Value)
End Select
End Sub
Private Function IsXReference(Text As String) As Boolean
Return If(Text.Left(1) = “@” And Text.Right(1) = “@”, True, False)
End Function
Sub Parse(Line As String)
a_Level = “”
a_Tag = “”
a_Value = “”
a_XReference = “”
a_Line = “”
If Line <> “” Then
a_Line = Line
Init
End If
End Sub[/code]
[h]ParseGedcom[/h]
Sub Parse(f As FolderItem, LB As Listbox)
Dim Gedcom As TextInputStream
If f <> Nil And f.Exists Then
LB.DeleteAllRows
// read Gedcom
Gedcom = TextInputStream.Open(f)
Gedcom.Encoding = Encodings.UTF8
While Not Gedcom.EOF
Dim Line As String = ConvertEncoding(Trim(Gedcom.ReadLine), Encodings.UTF8)
Dim Parser As New ParseLine
// parse Line
Parser.Parse(Line)
LB.AddRow(Parser.Level, Parser.Tag, Parser.XReference, Parser.Value)
Wend
End If
End Sub