Reputation: 513
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
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
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