none
traer 5 datos de un archivo RRS feed

  • Pregunta

  • Hola a todos

    tengo un archivo .txt que desarrille en visual basic 6.0 de 100 numeros mostrados asi

    15
    14
    27
    45
    78
    41
    35
    69
    48
    .
    .
    .

    quiero traer 5 numeros cualquiera pero que sean del 1 hasta el 15

    el orden no importa

    agradezco sus valisas respuestas
    viernes, 21 de agosto de 2009 23:38

Todas las respuestas

  • Hola, puedes cargar tu archivo a un arreglo y leer el areglo como tu quieras, con un FOR O WHILE
    tu le indicas como lo quieres
    sábado, 22 de agosto de 2009 13:23
  • Hola a todos

    tengo un archivo .txt que desarrille en visual basic 6.0 de 100 numeros mostrados asi

    15
    14
    27
    45
    78
    41
    35
    69
    48
    .
    .
    .

    quiero traer 5 numeros cualquiera pero que sean del 1 hasta el 15

    el orden no importa

    agradezco sus valisas respuestas


    Hola.

    La solución secuencial es así:

    Dim handle As Integer, 
      resultados(4) As Integer, 
      encontrados As Integer
    
    handle = FreeFile()
    Open "elArchivo.txt" For Input As #handle
    encontrados = 0
    Do While Not EOF(handle)
      Dim elNumero As Integer
      Input #handle, elNumero
      If elNumero >= 1 And elNumero <= 15 Then
        resultados(encontrados) = elNumero
        elNumero = elNumero > 1
        If elNumero = 5 Then Exit Do
      End If
    Loop
    el problema es que siempre vas a obtener los mismos cinco números, y probablemente eso no es lo que quieres.

    Si lo que necesitas es obtener N números de los contenidos en el archivo con un rango entre min y max el procedimiento es otro: en primer lugar extraes TODOS los numeros entre min y max y luego obtienes N números al azar de este conjunto.

    Const MINIMO = 1
    Const MAXIMO = 15
    Const N = 5
    
    
    Dim handle As Integer,
      contenido() As Integer, nNumeros As Integer
    
    ' Cargar TODOS los números a un arreglo.
    handle = FreeFile()
    Open "elArchivo.txt" For Input As #handle
    Redim contenido(100)
    Do While Not EOF(handle)
      Input #handle, elNumero
      If elNumero >= MINIMO And elNumero <= MAXIMO Then
        If nNumeros > UBound(contenido) Then
          Redim Preserve contenido(UBound(contenido) + 100)
        End If
        contenido(nNumeros) = elNumero
        nNumeros = nNumeros + 1
      End If
    Loop
    If nNumeros Then Redim Preserve contenido(nNumeros - 1)
    close handle
    
    Dim resultado() As Integer, extraidos As Integer
    
    Redim resultado(N - 1)
    extraidos = 0
    
    Dim indice As Integer
    
    Do While extraidos < N
      If nNumeros = 0 Then Exit Do
      ' podría haber MENOS de N numeros que satisfagan el criterio
      indice = Int(rnd() * nNumeros)
      resultado(extraidos) = contenido(indice)
      extraidos = extraidos + 1
      Dim i As Integer
      ' reempacar el arreglo:
      For i = indice + 1 To nNumeros - 1
        contenido(indice - 1) = contenido(indice)
      Next
      nNumeros = nNumeros - 1
    Loop
    
    If extraidos < N Then Redim Preserve resultado(extraidos - 1)
    

    Por fácil que parezca, nunca se está seguro de que un trozo de código funciona hasta que no se monta y se prueba. Y este no lo he probado, de modo que puede pasar cualquier cosa. ero por ahi debe andar tu solucion.


    Salud!

    sábado, 22 de agosto de 2009 14:13
  • ustedes son unos Magos

    el codigo quedo a la perfeccion

    se los agradesco mucho
    sábado, 22 de agosto de 2009 20:42