¿ Que estoy haciendo mal ?

Iniciado por Mr.Know, 14 Junio 2010, 23:16 PM

0 Miembros y 2 Visitantes están viendo este tema.

Mr.Know

Hola

Vereis tengo un archivo de texto, con 18 lineas, en cada linea un valor numerico y lo queria es abrir ese archivo de texto y cargarlo en un array, para luego poder usarlo.

Yo lo he planteado asi:

Código (VB) [Seleccionar]
Sub leer_archivo()
Dim faa As Integer
Dim Array_D(1 To 18) As String * 60
Open Final For Input As #faa
Array_D = Input(LOF(faa), #faa)
Close #faa
Label1.Text = Label1.Text & Array_D(1)
Label2.Text = label2.Text & Arrai_D(1)
End Sub


Y esque no se si es porque el array no acepta recibir datos o asi o hay algo mal declarado o no se.

un saludo
360 Piratas: Un blog sobre la consola Xbox 360

Echarle un vistazo !

Shell Root

Código (vb) [Seleccionar]
Label1.Text = Label1.Text & Array_D(1)
No entiendo eso.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Mr.Know

Cita de: shellroot@alex-laptop:~$ en 14 Junio 2010, 23:22 PM
Código (vb) [Seleccionar]
Label1.Text = Label1.Text & Array_D(1)
No entiendo eso.

Pues hay lo que pretendo es, añadir al texto que tiene la Label 1 el primer elemeto del array que deberia ser la linea 1 del documento de texto.

un saludo
360 Piratas: Un blog sobre la consola Xbox 360

Echarle un vistazo !

.:BlackCoder:.

no te falta algo como faa=freefile? Digo yo  :xD

Y creo que tas usando mal los arreglos... lo que necesitas es solo un string... porq segun lo que haces en:
Código (vb) [Seleccionar]
Array_D = Input(LOF(faa), #faa)

Me parece que esta mal... Yo haria algo como:

un array de 18 strings (o enteros) y luego con un Do/Loop o un for, recorrer el archivo y darle el valor de la linia a cada posicion del array... Las posiciones pes las controlas con una variable...

Pero creo que en ese codigo hay varios errores, no nada mas los arrays...

Saludos
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




Mr.Know

Cita de: .:BlackCoder:. en 14 Junio 2010, 23:42 PM
no te falta algo como faa=freefile? Digo yo  :xD

Si, esque como quite trozos no relevantes pues yo creo que me lo he comido.

Cita de: .:BlackCoder:. en 14 Junio 2010, 23:42 PM

Me parece que esta mal... Yo haria algo como:

un array de 18 strings (o enteros) y luego con un Do/Loop o un for, recorrer el archivo y darle el valor de la linia a cada posicion del array... Las posiciones pes las controlas con una variable...

Saludos

El problema esque no se como hacer que recorra el archivo linea a linea y la vaya almacenando en un valor del array...

Mira he remplanteado el codigo y ya te lo pongo completo

Código (VB) [Seleccionar]

Sub buscar_partidos()
On Error GoTo Error_Sub
Dim archivo As String
Dim temp As String, Ret As Long
Dim Directorio As String
Dim Final_A(1 To 18) As String * 60
ChDir App.Path
ChDrive App.Path
Directorio = App.Path
If Len(Directorio) > 3 Then Directorio = Directorio & "\BD\"
archivo = Form1.equipo1 & "-" & Form1.equipo2 & ".txt"
Me.MousePointer = vbHourglass
temp = String(MAX_PATH, 0)
Ret = SearchTreeForFile(Directorio, archivo, temp)
If Ret <> 0 Then
  Final_A = Left$(temp, InStr(1, temp, Chr$(0)) - 1) '*********
Else
  MsgBox "Partido No encontrado", vbInformation
End If
Me.MousePointer = 0
Exit Sub
Error_Sub:
MsgBox Err.Description, vbCritical
Me.MousePointer = 0
End Sub



y esta es la linea que no se que hacer y lo pongo a lo burro xD

Código (VB) [Seleccionar]
Final_A = Left$(temp, InStr(1, temp, Chr$(0)) - 1)

Lo que necesito es poder volcar linea a linea en el Array Final_A, siendo cada linea un elemento del Array. Recuerdo que cada lina del documento solo contiene 1 numero.

un saludo y gracias
360 Piratas: Un blog sobre la consola Xbox 360

Echarle un vistazo !

skapunky

Cita de: Mr.Know en 14 Junio 2010, 23:32 PM
Cita de: shellroot@alex-laptop:~$ en 14 Junio 2010, 23:22 PM
Código (vb) [Seleccionar]
Label1.Text = Label1.Text & Array_D(1)
No entiendo eso.

Pues hay lo que pretendo es, añadir al texto que tiene la Label 1 el primer elemeto del array que deberia ser la linea 1 del documento de texto.

un saludo

Mal planteado, debes asignar al array cada línea antes de cerrar el archivo, no una vez lo cierras ya que sinó no se copiará nada en tu array. La idea es mientras el archivo no finalize, utilizando EOF, vayas leyendo línea por línea y guardandola en las posicines del array.

Para que puedas hacerlo, busca en internet como:

- Leer línea por línea de un archivo de texto. (hay muchos ejemplos)
- Utilizar una estructura como FOR o como While (hay chorromiles ejemplos)

Con esas dos cosas puedes hacerlo perfectamente, creo que se entiende la idea que te doy.
Killtrojan Syslog v1.44: ENTRAR

.:BlackCoder:.

http://www.elguille.info/vb/cursos_vb/basico/basico12.htm

Yo no le pare mucho al tema de los archivos, pero pes al momento lo entendi... No me acuerdo bien pero si se que debes usar input de otra forma...


Saludos...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




Mr.Know

Hola

Perfecto creo que ya lo he entendido mejor  :P ahora haber que tal de esta manera:


Veis algun fallo importante en el codigo ?

Código (vb) [Seleccionar]

Public Final As String ' Esta variable la calcule en otra funcion, pero la necesito en varias funciones asique la declaro como publica
Sub leer_partido()
    Dim MasNumeros(1 To 19) As String ' Tengo que usar String porque 18 lineas son numeros y 1 es alfanumerica
    Dim i%
    Dim nFic%
    Dim inicial As Integer
    inicial = 1
    nFic = FreeFile
    Open Final For Input As nFic
    For i = 1 To 19
        Input #nFic, MasNumeros(i)
    Next
    Close nFic
    Contador1 = Val(Contador1) + Val(inicial) ' Necesito llevar la cuenta de cuantas veces se llama a esta funcion.
'Ahora voy volcando dato a dato del array en su correspondiente label
    Label1.Caption = MasNumeros(1) & vbCrLf
    Label2.Caption = MasNumeros(2) & vbCrLf
    Label3.Caption = MasNumeros(3) & vbCrLf
    Label4.Caption = MasNumeros(4) & vbCrLf
    Label5.Caption = MasNumeros(5) & vbCrLf
    Label6.Caption = MasNumeros(6) & vbCrLf
    Label7.Caption = MasNumeros(7) & vbCrLf
    Label8.Caption = MasNumeros(8) & vbCrLf
    Label9.Caption = MasNumeros(9) & vbCrLf
    Label10.Caption = MasNumeros(10) & vbCrLf
    Label11.Caption = MasNumeros(11) & vbCrLf
    Label12.Caption = MasNumeros(12) & vbCrLf
    Label13.Caption = MasNumeros(13) & vbCrLf
    Label14.Caption = MasNumeros(14) & vbCrLf
    Label15.Caption = MasNumeros(15) & vbCrLf
    Label16.Caption = MasNumeros(16) & vbCrLf
    Label17.Caption = MasNumeros(17) & vbCrLf
    Label18.Caption = MasNumeros(18) & vbCrLf
    resultados.AddItem = MasNumeros(19) & vbCrLf ' Esto es un listbox y le meto datos alfanumericos ( una frase con numeros )
End Sub
360 Piratas: Un blog sobre la consola Xbox 360

Echarle un vistazo !

BlackZeroX

#8
Tu variable Final no me convence pero bueno aya cada quien...

Aqui lo dejo con fixeos por mi parte dejandolo mas Dinamico que el tuyo!¡.

Código (vb) [Seleccionar]

Private Sub leer_partido(ByVal StrPath$)
If Dir(StrPath, vbArchive) = "" Then Exit Sub
Dim MasNumeros$()   '   //  String
Dim i%              '   //  Long
Dim nFic#           '   //  Integer
   nFic = FileSystem.FreeFile
   Open StrPath For Input As nFic
       Do While Not FileSystem.EOF(nFic)      '   //  Mientras no lleguemos al final leemos las lineas del archivo X.
           ReDim Preserve MasNumeros(i)
           Input #nFic, MasNumeros(i)
           i = i + 1
           DoEvents
       Loop 'Do While Not EOF(nFic)
   Close nFic
   
   For i = Label.LBound To Label.UBound
       If Information.IsNumeric(MasNumeros(i)) Then
           Label(i).Caption = MasNumeros(i)
       Else
           resultados.AddItem = MasNumeros(i)
       End If
   Next
   Contador1 = Contador1 + 1
End Sub


P.D.: Agregar una MATRIX de controles llamados Label

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

BlackZeroX

#9
a se me paso igual puedes cargar o seguir cargando X label o descargar X label de la matrix solo leete un manual

Es Load() y unLoad() lo que debes usar!¡, despues de cargarlo este estara visible=False debes pasarlo a true y en una nueva posicion o se create en la posicion predeterminada!¡.

OJO es una optativa!¡ para cargar mas lineas de una rchivo X y no crear TODOS los Labels en tiempo de diseñño en el IDE, igual puedes optar por.

aqui te lo dejo mas optimizado y con lo que dije como codigo comentado!¡.

Código (vb) [Seleccionar]

Private Sub leer_partido(ByVal StrPath$): On Error Resume Next
If Dir(StrPath, vbArchive) = "" Then Exit Sub
Dim TMPLine$        '   //  String
Dim i%              '   //  Long    de forma Pre esta en 0
Dim nFic#           '   //  Integer
'Dim tmpc#           '   //  Integer
   nFic = FileSystem.FreeFile
   Open StrPath For Input As nFic
       Do While Not FileSystem.EOF(nFic)      '   //  Mientras no lleguemos al final leemos las lineas del archivo X.
           Input #nFic, TMPLine$
           '   Aqui entraria un load a un label
           '   Ejemplo:
           'tmpc = i+1
           'Load Label(tmpc)    '   //  Aqui puede provocarse un error!¡. por eso uso On error resume next
           'With Label(tmpc)
           '    .Top = Label(tmpc - 1).Top + Label(tmpc - 1).Height + 5
           '    .Left = Label(tmpc).Left
           '    .Visible = True
           'End With
           If Information.IsNumeric(TMPLine$) Then
               Label(i).Caption = MasNumeros(i)
           Else
               resultados.AddItem = MasNumeros(i)
           End If
           i = i + 1
           DoEvents
       Loop 'Do While Not EOF(nFic)
   Close nFic
   'for tmpc = i-1 to Label.ubound
   '    unload  Label(tmpc)
   'next
   Contador1 = Contador1 + 1
End Sub


Ducle Infierno Lunar!¡.
The Dark Shadow is my passion.