elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Aver quien puede con ayudarme con este codigo ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Aver quien puede con ayudarme con este codigo ?  (Leído 4,188 veces)
luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Aver quien puede con ayudarme con este codigo ?
« en: 5 Marzo 2023, 14:53 pm »

Hola chicos espero se acuerden de mi jejej por problemas de trabajo he tenido que dejar hace algún tiempo la programación  y estoy bastante perdido,los que me conocen ya saben que programo por gusto y siempre pensando en lo imposible .(ganar la loteria ) por ejemplo y aca tengo un codigo que no logro hacerlo andar ,de verdad que he perdido facultades eso es lo malo de tener 62 años :(

Bien alguien puede decirme que le pasa a este código ?

Código
  1. Private Sub btnProcesar_Click(sender As Object, e As EventArgs) Handles btnProcesar.Click
  2.    ' Lee los registros del archivo de texto
  3.    Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("ruta_del_archivo.txt"))
  4.  
  5.    ' Crea una variable para almacenar los resultados
  6.    Dim resultados As String = ""
  7.  
  8.    ' Itera sobre los registros y procesa cada uno
  9.    For Each registro As String In registros
  10.        ' Separa los números del registro en un array
  11.        Dim numeros() As String = registro.Split(" "c)
  12.  
  13.        ' Verifica que el último número no sea mayor que 49
  14.        If Integer.Parse(numeros(5)) <= 49 Then
  15.            ' Encuentra la constante entre los números
  16.            Dim constante As Integer = Integer.Parse(numeros(1)) - Integer.Parse(numeros(0))
  17.  
  18.            ' Cuenta cada cuántos registros aparece esa constante
  19.            Dim contador As Integer = 1
  20.            For i As Integer = 2 To numeros.Length - 1 Step 1
  21.                If Integer.Parse(numeros(i)) - Integer.Parse(numeros(i - 1)) = constante Then
  22.                    contador += 1
  23.                Else
  24.                    Exit For
  25.                End If
  26.            Next
  27.  
  28.            ' Agrega los resultados al string de resultados
  29.            resultados &= "Constante: " & constante.ToString() & ", se repite cada " & contador.ToString() & " registros" & Environment.NewLine
  30.        End If
  31.    Next
  32.  
  33.    ' Muestra los resultados en el TextBox
  34.    txtResultados.Text = resultados
  35. End Sub

saludos
Luis


En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Aver quien puede con ayudarme con este codigo ?
« Respuesta #1 en: 6 Marzo 2023, 03:26 am »

Hola!

Qué error te da? Probaste debuggear con el IDE?

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Aver quien puede con ayudarme con este codigo ?
« Respuesta #2 en: 6 Marzo 2023, 05:16 am »

Hola!

Qué error te da? Probaste debuggear con el IDE?

Saludos!

lo he modificado ahora se ejecuta sin errores pero sigue sin mostradme resultados ?

Código
  1. Imports System.IO
  2.  
  3.  
  4.  
  5. Public Class Form1
  6.  
  7.    Private Sub BTNProcesar_Click(sender As Object, e As EventArgs) Handles btnProcesar.Click
  8.  
  9.        ' Lee los registros del archivo de texto
  10.        Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
  11.  
  12.        ' Crea una variable para almacenar los resultados
  13.        Dim resultado As String = ""
  14.        Dim resultado2 As String = ""
  15.  
  16.        ' Define el valor máximo de la barra de progreso
  17.        Dim valorMaximo As Integer = registros.Count
  18.  
  19.        ' Configura la barra de progreso
  20.        ProgressBar1.Minimum = 0
  21.        ProgressBar1.Maximum = valorMaximo
  22.        ProgressBar1.Value = 0
  23.  
  24.        ' Itera sobre los registros y procesa cada uno
  25.        For Each registro As String In registros
  26.            ' Verifica que la cadena tenga el formato adecuado
  27.            If registro.Length >= 30 Then
  28.                ' Separa los números del registro en un array
  29.                Dim numeros() As String = registro.Substring(11, 14).Split(" "c)
  30.  
  31.                ' Verifica que haya seis números en el array
  32.                If numeros.Length = 6 Then
  33.                    ' Verifica que los números sean válidos
  34.                    Dim numerosValidos As Boolean = True
  35.                    For Each numero As String In numeros
  36.                        If Not IsNumeric(numero) OrElse Integer.Parse(numero) < 1 OrElse Integer.Parse(numero) > 49 Then
  37.                            numerosValidos = False
  38.                            Exit For
  39.                        End If
  40.                    Next
  41.  
  42.                    If numerosValidos Then
  43.                        ' Encuentra la constante entre los números
  44.                        Dim constante As Integer = Integer.Parse(numeros(1)) - Integer.Parse(numeros(0))
  45.  
  46.                        ' Cuenta cada cuántos registros aparece esa constante
  47.                        Dim contador As Integer = 1
  48.                        For i As Integer = 2 To numeros.Length - 1 Step 1
  49.                            If Integer.Parse(numeros(i)) - Integer.Parse(numeros(i - 1)) = constante Then
  50.                                contador += 1
  51.                            Else
  52.                                Exit For
  53.                            End If
  54.                        Next
  55.  
  56.                        ' Agrega los resultados al string de resultados
  57.                        resultado &= "Constante: " & constante.ToString() & ", se repite cada " & contador.ToString() & " registros" & Environment.NewLine
  58.  
  59.                        ' Cuenta cada cuántos registros aparece una constante par o impar
  60.                        Dim contador2 As Integer = 0
  61.                        For Each numero As String In numeros
  62.                            If Integer.Parse(numero) Mod 2 = 0 And constante Mod 2 = 0 Then
  63.                                contador2 += 1
  64.                            ElseIf Integer.Parse(numero) Mod 2 <> 0 And constante Mod 2 <> 0 Then
  65.                                contador2 += 1
  66.                            End If
  67.                        Next
  68.  
  69.                        ' Agrega los resultados al string de resultados 2
  70.                        resultado2 &= "Constante: " & constante.ToString() & ", se repite cada " & contador2.ToString() & " registros" & Environment.NewLine
  71.  
  72.                    End If
  73.                End If
  74.            End If
  75.  
  76.            ' Actualiza el valor de la barra de progreso
  77.            ProgressBar1.Value += 1
  78.        Next
  79.  
  80.        ' Muestra los resultados en el TextBox
  81.        TextBox1.Text = resultado
  82.        TextBox2.Text = resultado2
  83.  
  84.  
  85.    End Sub
  86.  
  87. End Class


vale que no me encuentre en el primer texbox ya que son pocos registros para la comparativa pero la otra funcion tampoco me muestra nada en el segundo texbox

saludos


En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Aver quien puede con ayudarme con este codigo ?
« Respuesta #3 en: 21 Junio 2023, 14:05 pm »

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
Código
  1. ' Lee los registros del archivo de texto
  2.        Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
  3.  

Procede por tanto envolverlo en un controlador de error:
Código
  1. Try
  2.        ' Lee los registros del archivo de texto
  3.        Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
  4.  
  5. Catch
  6.    messagebox.show("Hubo un error al tratar de leer el fichero..."
  7.    exit sub
  8. end try
  9.  
  10. '...el resto del codigo...
  11.  
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:
Código
  1.           ' Verifica que la cadena tenga el formato adecuado
  2.            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:

Código
  1.  
  2.  
  3. dim RegistrosCortos as integer
  4.  
  5. For Each registro As String In registros
  6.            ' Verifica que la cadena tenga el formato adecuado
  7.            If registro.Length >= 30 Then
  8.                 ... el código principal
  9.            else
  10.                RegistrosCortos +=1
  11.            end if
  12. next
  13.  
  14. messagebox.show("El fichero tiene " & registros.count.tostring & " lineas... de las cuales tienen menos de 30 caracteres "  & RegistrosCortos.tostring & " lineas."
  15.  

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:
Código
  1.                ' Verifica que haya seis numeros en el array
  2.                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...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines