Paul Etscheit
Paul Etscheit

Reputation: 513

Error: A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

I'm working on a simple Matching Algorithm. I'm quite new to programming and don't quite understand the error im getting.

The File.txt contains data in this format (without the spaces between each line):

5,Name,9,9,9,9

4,Name,4,8,0,3 

3,Name,4,7,3,5 

2,Name,3,5,6,3 

1,Name,5,8,2,9

0,Name,2,5,3,2

"A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Conversion from string "" to type 'Integer' is not valid."

The error occures for "CustomNrOld = splits(0)" and I don't see why.

Would be happy about any kind of help!!

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim CustomNrNew As Integer
        Dim NameIDnew As String
        Dim Alphanew As Integer
        Dim Betanew As Integer
        Dim Gammanew As Integer
        Dim Deltanew As Integer
        Dim CustomNrOld As Integer
        Dim NameIDold As String
        Dim Alphaold As Integer
        Dim Betaold As Integer
        Dim Gammaold As Integer
        Dim Deltaold As Integer
        Dim R1 As Integer
        Dim R2 As Integer
        Dim R3 As Integer
        Dim R4 As Integer

    Using sr As New StreamReader("C:\\Users\\Paul\\Documents\\Weever\\file.txt")
        Dim splits As String() = sr.ReadLine.Split(","c)
        CustomNrNew = splits(0)
        NameIDnew = splits(1)
        Alphanew = splits(2)
        Betanew = splits(3)
        Gammanew = splits(4)
        Deltanew = splits(5)
    End Using

    Using sr As New StreamReader("C:\\Users\\Paul\\Documents\\Weever\\file.txt")
        sr.ReadLine()
        Do While Not sr.EndOfStream
            Dim splits As String() = sr.ReadLine.Split(","c)
            CustomNrOld = splits(0)
            NameIDold = splits(1)
            Alphaold = splits(2)
            Betaold = splits(3)
            Gammaold = splits(4)
            Deltaold = splits(5)

            If Alphanew >= Alphaold = True Then
                R1 = (Alphaold / Alphanew) * 100
            Else
                R1 = (Alphanew / Alphaold) * 100
            End If

            If Betanew >= Betaold = True Then
                R2 = (Betaold / Betanew) * 100
            Else
                R2 = (Betanew / Betaold) * 100
            End If
            If Gammanew >= Gammaold = True Then
                R3 = (Gammaold / Gammanew) * 100
            Else
                R3 = (Gammanew / Gammaold) * 100
            End If
            If Deltanew >= Deltaold = True Then
                R4 = (Deltaold / Deltanew) * 100
            Else
                R4 = (Deltanew / Deltaold) * 100
            End If

            Dim Result As Integer
            Result = ((R1 + R2 + R3 + R4) / 4)

            My.Computer.FileSystem.WriteAllText("C:\\Users\\Paul\\Documents\\Weever\\" & NameIDnew & ".txt",
               Result & "%" & " - " & NameIDold & " " & R1 & "% / " & R2 & "% / " & R3 & "% / " & R4 & "% " & Environment.NewLine, True)

            My.Computer.FileSystem.WriteAllText("C:\\Users\\Paul\\Documents\\Weever\\" & NameIDold & ".txt",
               Result & "%" & " - " & NameIDnew & " " & R1 & "% / " & R2 & "% / " & R3 & "% / " & R4 & "% " & Environment.NewLine, True)
        Loop
    End Using

Upvotes: 0

Views: 4479

Answers (2)

MichaelEvanchik
MichaelEvanchik

Reputation: 1766

you declared splits as a bucket of strings

and then tried to put an string in an integer

CustomNrOld = Convert.ToInt32(splits(0));  

will solve your problem

Upvotes: 0

Kyle Pittman
Kyle Pittman

Reputation: 3077

Anywhere you are referencing something in splits() and you want it to be in an Integer variable, you'll need to convert your string to an integer (that's what the error is telling you).

For example: CustomNrNew = splits(0)

In this code you're trying to assign a String value (splits is an array of Strings) into an Integer (CustomNrNew). You can't convert a string directly to an integer, so you're getting an error.

To convert the string value to an integer, try using CustomNrNew = Convert.ToInt32(splits(0)) (and replace '0' with whichever value you're using on each line).

Upvotes: 1

Related Questions