Module csvtolatex

   Sub Main(ByVal args() As String)

       Const version = "1.3"
       Dim iPath, ePfad, mode, Fso, iFile, Text, geteilt, nCount, configPath, config, mess, running, options, comma
       Const title = "csvtolatex " & version
       If args.Length = 0 Then
           configPath = InputBox("Please write the path to your configuration file (*.ctl):", title)
       Else
           configPath = args(0)
       End If

       config = False
       running = False

       Try
           Fso = CreateObject("Scripting.FileSystemObject")
           iFile = Fso.OpenTextFile(configPath)
           'Catch bug As System.IO.FileNotFoundException
           '    mess = MsgBox("configurationfile not found", 0, title)
           '    csvtolatex.Exit()
           '    'Catch ex As Exception
           'mess = MsgBox("Something is wrong with your configurationfile or your path.", 0, title)
           'csvtolatex.Exit()
           'End Try

           'Try
           Do Until iFile.AtEndOfStream
               Text = iFile.ReadLine
               If InStr(Text, "input=") Then
                   Text = Replace(Text, "input=", "")
                   iPath = Trim(Text)
               End If
               If InStr(Text, "output=") Then
                   If InStr(Text, "output=config=") Then
                       config = True
                   End If
                   Text = Replace(Text, "output=config=", "")
                   Text = Replace(Text, "output=", "")
                   ePfad = Trim(Text)
               End If
               If InStr(Text, "mode=") Then
                   Text = Replace(Text, "mode=", "")
                   mode = Trim(Text)
               End If
               If InStr(Text, "options=") Then
                   Text = Replace(Text, "options=", "")
                   options = Trim(Text)
               End If
               If InStr(Text, "commatopoint") Then
                   comma = "ctp"
               End If
               If InStr(Text, "pointtocomma") Then
                   comma = "ptc"
               End If
           Loop

           If InStr(iPath, ":\") Then
           Else
               geteilt = Split(configPath, "\")
               nCount = UBound(geteilt, 1) - LBound(geteilt, 1)
               iPath = Replace(configPath, geteilt(nCount), "") & iPath
               iPath = Replace(iPath, "\\", "\")
           End If

           If InStr(ePfad, ":\") Then
           Else
               If config Then
                   Text = configPath
               Else
                   Text = iPath
               End If
               geteilt = Split(Text, "\")
               nCount = UBound(geteilt, 1) - LBound(geteilt, 1)
               ePfad = Replace(Text, geteilt(nCount), "") & ePfad
               ePfad = Replace(ePfad, "\\", "\")
               If (CInt(InStrRev(ePfad, "\")) = CInt(Len(ePfad))) Then
               Else
                   ePfad = ePfad & "\"
               End If
           End If

           If InStr(mode, "math") Then
               mode = "$"
           ElseIf InStr(mode, "text") Then
               mode = ""
           Else
               mode = "$"
           End If

           Text = ""
           Dim index, delete, lineend, zusatztext, first, spundzetrenner
           Dim mnumber, worktext, testnumber, zwischen, addition, arbeitstext, indexi, muellzahl, head
           index = "0"
           delete = "@€€@µ"
           first = True

           If InStr(options, "nolines") Then
               spundzetrenner = ""
           Else
               spundzetrenner = "|"
           End If

           Dim eFile, ePath


           Fso = CreateObject("Scripting.FileSystemObject")
           iFile = Fso.OpenTextFile(iPath)


           Do Until iFile.AtEndOfStream
               Text = iFile.ReadLine
               Do While ((InStr(Text, " //")) Or (InStr(Text, "// ")))
                   Text = Replace(Text, " //", "//")
                   Text = Replace(Text, "// ", "//")
               Loop
               Do While ((InStr(Text, ";//;")))
                   Text = Replace(Text, ";//;", ";//")
               Loop
               Text = Replace(Text, ";/endhead", ";// /endhead")
               Do While ((InStr(Text, "/endhead;")))
                   Text = Replace(Text, "/endhead;", "/endhead")
               Loop
               If ((InStr(Text, ";//")) And running) Then
                   Dim muell
                   Text = Replace(Text, ";//", "")
                   arbeitstext = ""
                   geteilt = Split(Text, ";")
                   indexi = "0"
                   nCount = UBound(geteilt, 1) - LBound(geteilt, 1) + 1
                   If first Then
                       first = False
                       Dim columns
                       columns = "% " & spundzetrenner
                       For indi = 1 To nCount Step 1
                           columns = columns & "c" & spundzetrenner
                       Next
                       Dim coltext
                       coltext = "% number of columns: " & nCount
                       eFile.WriteLine(coltext)
                       eFile.WriteLine(columns)
                   End If
                   muellzahl = "0"
                   zusatztext = mode
                   Do
                       zwischen = 1
                       If InStr(geteilt(indexi), "/multicolumn{") Then
                           mnumber = InStr(geteilt(indexi), "/multicolumn{")
                           testnumber = InStr(geteilt(indexi), "}")
                           addition = "0"
                           zwischen = geteilt(indexi)
                           testnumber = testnumber - 1
                           zwischen = Left(zwischen, testnumber)
                           testnumber = InStrRev(zwischen, "{")
                           testnumber = Len(zwischen) - testnumber
                           zwischen = Right(zwischen, testnumber)
                           geteilt(indexi) = Replace(geteilt(indexi), "/multicolumn{", "\multicolumn{")
                           zusatztext = ""
                       ElseIf InStr(geteilt(indexi), "/multirow{") Then
                           geteilt(indexi) = Replace(geteilt(indexi), "/multirow{", " \multirow{")
                           zusatztext = ""
                       ElseIf ((Len(geteilt(indexi)) = 0) Or InStr(Text, "/cline{") Or InStr(Text, "\cline{")) Then
                           zusatztext = ""
                       Else
                           zusatztext = mode
                       End If
                       testnumber = indexi + 1
                       If InStr(testnumber, nCount) Then
                           arbeitstext = arbeitstext & zusatztext & geteilt(indexi) & zusatztext
                       Else
                           testnumber = indexi + zwischen
                           If (InStr(testnumber, nCount) And InStr(geteilt(indexi), "\multicolumn{")) Then
                               arbeitstext = arbeitstext & zusatztext & geteilt(indexi) & zusatztext
                           Else
                               arbeitstext = arbeitstext & zusatztext & geteilt(indexi) & zusatztext & " & "
                           End If
                       End If
                       indexi = indexi + zwischen
                   Loop Until (InStr(indexi, nCount))
                   Text = arbeitstext
                   head = " "
                   If InStr(Text, "/endhead") Then
                       Text = Replace(Text, "/endhead", "")
                       head = " \endhead "
                   End If
                   lineend = "\hline"
                   If InStr(Text, "/cline{") Then
                       Text = Replace(Text, "/cline{", "\cline{")
                   End If
                   If InStr(Text, "\cline{") Then
                       mnumber = InStr(Text, "\cline{") - 1
                       arbeitstext = Left(Text, mnumber)
                       zwischen = Replace(Text, arbeitstext, "")
                       lineend = zwischen
                       Text = arbeitstext
                   End If
                   If InStr(Text, "/hline") Then
                       Text = Replace(Text, "/hline", "")
                       lineend = lineend & "\hline"
                   End If
                   If InStr(options, "nolines") Then
                       lineend = ""
                   End If
                   Text = Replace(Text, "/.,", ";")
                   Text = Text & "\\ " & lineend & head
                   Text = Replace(Text, " & " & mode & "/blank" & mode, " & ")
                   Text = Replace(Text, " & " & "/blank", " & ")
                   Text = Replace(Text, "/blank", "")
                   If InStr(comma, "ctp") Then
                       While InStr(Text, ",")
                           Text = Replace(Text, ",", ".")
                       End While
                   ElseIf InStr(comma, "ctp") Then
                       While InStr(Text, ".")
                           Text = Replace(Text, ",", ".")
                       End While
                   End If
               eFile.WriteLine(Text)
               End If
               If InStr(Text, "/begin{") Then
                   Text = Replace(Text, "/begin{", "")
                   Text = Replace(Text, ";", "")
                   ePath = ePfad & Replace(Text, "}", "")
                   first = True
                   running = True
                   eFile = Fso.CreateTextFile(ePath)
               End If
               If InStr(Text, "/end") Then
                   eFile.Close()
                   running = False
                   first = False
               End If
           Loop
               iFile.Close()


               Text = MsgBox("Conversion complete!", 0, title)
       Catch bug As System.IO.FileNotFoundException
           mess = MsgBox("configurationfile not found. Your written path is: " & configPath, 0, title)
       Catch ex As System.ArgumentException
           mess = MsgBox("Something is wrong here, please check your configuration file or your configuration path. Your written path is: " & configPath, 0, title)
       Catch e As Exception
           mess = MsgBox("Something is wrong here, please check your configuration file.", 0, title)
       End Try

   End Sub

End Module