Hola Luis...
En principio (de un vistazxo simple) el código no parece contener errores...
...pero puede haber errores semánticos, que son los más difíciles de localizar.
El error semántico, es un error tal que hace algo y lo hace bien, pero no es exactamente lo que uno quiere que haga .
Vamos a tratar de descubrir si los hay, cuales pudieran ser...
De entrada, esto es conveniente que controle posibles errores
' Lee los registros del archivo de texto
Dim registros
As List
(Of String) = New List
(Of String)(IO.
File.
ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
Procede por tanto envolverlo en un controlador de error:
Try
' Lee los registros del archivo de texto
Dim registros
As List
(Of String) = New List
(Of String)(IO.
File.
ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
Catch
messagebox.show("Hubo un error al tratar de leer el fichero..."
exit sub
end try
'...el resto del codigo...
También podías usar el parámetro ' StringSplitOptions.RemoveEmptyEntries', para deshacerte de líneas vacías si el fichero contuviera alguna...
Seguimos... dentro del bucle principal, tenemos la línea:
' Verifica que la cadena tenga el formato adecuado
If registro.Length >= 30 Then
No hay un 'else'... luego no sabemos cuántas líneas caen dentro y cuántas fuera...
No es extrictamente necesario, pero si no se obtiene el resultado esperado, lo adecuado es controlar dicha situación y ver si por aquí hay un 'coladero'... el fichero podría tener al final, saltos de línea a mansalva (como separador de campos, en vez de tabuladores).
Entonces antes del bucle sería adecuaod poner cuantas líneas fueron leídas del fichero:
dim RegistrosCortos as integer
For Each registro As String In registros
' Verifica que la cadena tenga el formato adecuado
If registro.Length >= 30 Then
... el código principal
else
RegistrosCortos +=1
end if
next
messagebox.show("El fichero tiene " & registros.count.tostring & " lineas... de las cuales tienen menos de 30 caracteres " & RegistrosCortos.tostring & " lineas."
Esto es porque si consideramos el caso de que una línea fueran 6 números entre el 1 y el 49, y suponiendo que los valores 1-9 fueran todos antecedidos de un '0', tendríamos (como máximo) solo 17 caracteres (6 números * 2 digitos) + 5 espacios entre los 6 números = 17, que son bastante menos que los 30 esperados....
En realidad esa comparación yo la eliminaría por completo, dado que luego viene otra que es más certera al caso: ' Verifica que haya seis numeros en el array
If numeros.Length = 6 Then
Luego ahí podría residir probablemente tu error semántico... creer que el largo de cada línea es como mínimo de 30 caracteres.Lo demás aunque es mejorable, no hay posibilidad de otros errores. En realidad sabiendo que el fichero solo contiene números del 1 al 49, espacios y saltos de líneas, sobran algunas verificaciones... pero si existe el riesgo de manipulación externa, pudiera ser necesario y en tal caso avisar pues deja el fichero de alguna forma corrupto.
Prueba a eliminar dichas líneas o al menos comentarlas y verifica si ahora el resultado es el esperado...