Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

txt y coordenadas en vb6

Estas en el tema de txt y coordenadas en vb6 en el foro de Visual Basic clásico en Foros del Web. Hola: Espero darme a entender. He buscado mucho esto y no logro mi objetivo. Tengo un archivo de texto donde tengo datos escritos por linea, ...
  #1 (permalink)  
Antiguo 08/04/2011, 07:52
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
txt y coordenadas en vb6

Hola:
Espero darme a entender. He buscado mucho esto y no logro mi objetivo. Tengo un archivo de texto donde tengo datos escritos por linea, es decir:
nombre de archivo
extencion
lugar
color 1 2
etc
etc
bloque1
-10,1
-23,-11
coordenadas
coordenadas
coordenadas
etc
bloque2
23,98
etc
etc
etc
las primeras lineas varean de acuerdo a los datos del archivo; despues viene el primer bloque,
y en las siguientes lineas las coordenadas. Son estas coordenadas que deseo graficar en un picturebox. Ya he leido bastante acerca de graficas, pero no se como escoger los datos precisos,
que son: bloque1, conjunto de coordenadas; bloque2 conjunto de coordenadas; bloque3 etc.etc. y decirle a mi programa que grafique esas coordenadas. los archivos de texto pueden variar en bloques y cantidad de coordenadas. Todos los comentarios, tutoriales, información, links,etc. son muy bienvenidos. De antemano muchisimas gracias.
Saludos.
  #2 (permalink)  
Antiguo 11/04/2011, 12:43
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Hola!
Por que no usas archivos .ini?:
Código vb:
Ver original
  1. 'EN UN MODULO - FUNCIONES API's PARA LEER ARCHIVOS INI
  2.    Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
  3.  
  4. 'FUNCION PARA LEER LOS DATOS DEL ARCHIVO INI
  5. Public Function LeerINI(strClave As String, strNombre As String, Optional ByVal strDefecto As String) As String
  6.     Dim intTamano As Integer
  7.     Dim strTexto As String
  8.     Dim strArchivoINI As String
  9.    
  10.     strArchivoINI = App.Path & "\COORDENADAS.INI" 'La variable strArchivoINI contiene el nombre del archivo INI a abrir
  11.    
  12.     strTexto = Space(200)
  13.     intTamano = GetPrivateProfileString(strClave, strNombre, "", strTexto, Len(strTexto), strArchivoINI)
  14.    
  15.     If intTamano > 0 Then
  16.         strTexto = Left$(strTexto, intTamano)
  17.     Else
  18.         strTexto = ""
  19.     End If
  20.  
  21.     If Len(strTexto) Then
  22.         LeerINI = strTexto
  23.     Else
  24.         LeerINI = strDefecto
  25.     End If
  26. End Function
  27.  
  28. '...
  29. '...
  30. '...
  31.  
  32. 'PARA LLAMAR, EN UN BOTON:
  33.    Dim LeerCoordenadas_X as double
  34.     Dim LeerCoordenadas_Y as double
  35.  
  36.     LeerCoordenadas_X = LeerINI("BLOQUE1", "COORDENADA_X", "0")
  37.     LeerCoordenadas_Y = LeerINI("BLOQUE1", "COORDENADA_Y", "0")

Como ya tienes los datos en las variables LEERCOORDENADAS_X y LEERCOORDENADAS_Y, asignalas al PICTURE.

El archivo "COORDENADAS.INI", debe estar en la misma ruta de la aplicacion, con este formato:


[BLOQUE1]
COORDENADA_X=-10
COORDENADA_Y= 1

[BLOQUE2]
COORDENADA_X= -23
COORDENADA_Y= -11
  #3 (permalink)  
Antiguo 12/04/2011, 18:41
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola lokoman:
primero que nada, agradezco mucho tu respuesta, he leido tu codigo, y es bastante bueno.
bien, aqui empiezan mis problemas; El archivo de texto lo genera una aplicacion en base a datos que se generan por zonas, el primer bloque genera un especie de mapa de la zona; el segundo bloque,el tercero y/o los demas son datos de esa zona. una vez generado ese txt, se pasa a otros departamentos en los que se supone que tendran una aplicacion que leera cada txt para su proceso.
Asi bien, es indispensable leer los txt para poder trabajarlos, despues cambiar a otro txt y continuar el trabajo.
Aqui el detalle seria que un ini abriria siempre el mismo archivo, y se nececita cambiar el txt constantemente, vere que puedo acoplar de tu codigo, pero si tienes otra idea, tambien es bienvenida.
Saludos.
  #4 (permalink)  
Antiguo 13/04/2011, 11:32
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Me gustaría ver uno de esos archivos para poder darte mas algo solido... No entiendo bien como lo describes:

nombre de archivo
extencion
lugar
color 1 2
etc
etc
bloque1
-10,1
-23,-11
coordenadas
coordenadas
coordenadas
etc
bloque2
23,98
etc
etc
etc

Pero lo puedes leer de esta forma (confirma que los valores de las variables "COORDENADA_X" y "COORDENADA_Y" estén correctos):

Código vb:
Ver original
  1. Dim strRUTA_ARCH AS STRING, DATA AS STRING
  2.     Dim HAY_DATOS AS BOOLEAN
  3.    
  4.     HAY_DATOS=FALSE
  5.     strRUTA_ARCH=APP.PATH & "\COORDENADAS.TXT"
  6.  
  7.     Open strRUTA_ARCH For Input As #1
  8.         Do While EOF(1) = False
  9.             Line Input #1, DATA
  10.        
  11.             If Trim(DATA) = "BLOQUE1" Then
  12.                 HAY_DATOS=TRUE
  13.             ELSE
  14.                 IF HAY_DATOS=TRUE THEN
  15.                    COORDENADA_X = Mid(DATA, 1, INSTR(1, DATA, ","))
  16.                    COORDENADA_Y = Mid(DATA, INSTR(1, DATA, ",")+1)
  17.  
  18.                    '...TU CODIGO PARA GRAFICAR
  19.                   '...TU CODIGO PARA GRAFICAR
  20.                   '...TU CODIGO PARA GRAFICAR
  21.  
  22.                    HAY_DATOS=FALSE
  23.                 END IF
  24.                 DoEvents
  25.             End If 'If Trim(DATA) = "BLOQUE1" Then
  26.        Loop
  27.     Close #1
  #5 (permalink)  
Antiguo 08/05/2011, 19:25
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola lokoman:
Disculpa la tardansa. Bien, veras; no pude obener un original, pero esto es lo mas exacto posible:

zona 1
zona numero: 1
inicio: 0
puntos de zona por area
block color referencia
1 8 417
2 5 390
(aqui podriamos llegar hasta 20, este tiene solo 2)
tabla
numero
informacion
block 1
-5, 1
1, -7
-7, 2
2, -9
(este primer block siempre graficara un mapa de zona, aqui solo puse unas coordenadas, inventadas; pero en la linea 6 te dice que son 417)
block 2
-221, 150
-321, 161
-331, 163
-301, 163
-286, 164
-279, 161
-284, 169
(en este bloque son 390, tambien tube que inventarlas, pero las referencias son 390, aunque sinceramente no las he contado linea por linea)

Ahora bien:
lo que nececito es identificar cada block para poder asignarle un color, y despues obtener las coordenadas de cada block para graficarlas. Todo lo demas del documento no lo nececito, pero asi son generados los txt, por lo que no me es posible modificarlos.
He tratado de acoplar los codigos que me diste, pero no logro graficar todo en conjunto, a lo mas que he llegado es lina por linea, pero comprenderas que es imposible e ilogico.
Picture1.Line (xA, yA)-(x, y), vbBlue
pense en hacer un bucle, pero como le digo a mi codigo que lea la linea: block 1 para darle un color y obtenga de las siguientes lineas la cantidad de coordenadas; pero solo hasta la linea antes de block 2 y las grafique en el picturebox1.
Espero que me hayas entendido mejor, cualquier idea o codigo siempre es bien agradecido.
Saludos.
  #6 (permalink)  
Antiguo 11/05/2011, 12:15
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Hice un pequeño proyecto, te lee un archivo "Coordenadas.txt", te hace las lineas segun los datos que estan entre "block 1", "block 2", block 3", block 4", etc, y les pone el color aleatorio:

http://myfreefilehosting.com/f/087462c82e_0.04MB

Dale donde dice (Click Here To Download):

"Use the link in the address bar or the one below
Don't hotlink. Link expires.
myfreefilehosting.com/f/087462c82e_0.04MB
Click Here To Download"

Bajalo y adaptalo al tuyo.

Debes tomar en cuenta que los datos de las coordenadas en negativo (ejem: -200,-300), no van a salir en el picture. Si lo que quieres es un sistema de coordenadas cartesianas bidimensional, es otra cosa....
  #7 (permalink)  
Antiguo 11/05/2011, 15:11
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

Saludos.
Te he dado cuartel para que no te encontrases el tema solucionado despues de comerte la cabeza, compañero lokoman.
El caso es que creo que no has pillado bien el asunto.
Las coordenadas positivas y negativas deben significar que cada linea comienza donde acabó la anterior.
Aunque no tengo claro como se hace para comenzar una linea nueva. Cada bloque deberia ser una parte del grafico, y debería tener al comienzo las coordenadas de inicio. Yo he usado el centro del PictureBox como inicio. A ver que os parece:

Se necesita un TextBox, un PictureBox grandecito y 3 botones (Command1, 2 y 3), y las coordenadas en un fichero llamado "Fichero.txt" de momento.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Type Coordenadas
  4.   X As Long
  5.   Y As Long
  6. End Type
  7.  
  8. Private Sub Command1_Click()
  9.   ' carga las coordenadas del fichero y las muestra en el textbox.
  10.  Dim F As Long
  11.   Dim F2 As Long
  12.   Dim Block() As Coordenadas
  13.   Text1.Text = ""
  14.   ' intentamos cargar hasta 100 posibles blocks
  15.  For F = 1 To 100
  16.     If CargaCoordenadas("Fichero.txt", F, Block) Then
  17.       Text1.Text = Text1.Text & "Block" & F & vbCrLf & Block(0).X & ", " & Block(0).Y & vbCrLf
  18.       For F2 = 1 To UBound(Block)
  19.         Text1.Text = Text1.Text & Block(F2).X & ", " & Block(F2).Y & vbCrLf
  20.       Next F2
  21.     Else
  22.       ' si un Block no existe se para y no se cargan mas
  23.      Exit For
  24.     End If
  25.   Next F
  26. End Sub
  27.  
  28. Private Sub Command2_Click()
  29.   ' carga las coordenadas del Block 2 y las muestra en un grafico
  30.  Dim Block() As Coordenadas
  31.   Picture1.Cls
  32.   CargaCoordenadas "Fichero.txt", 2, Block
  33.   MuestraGrafico Block, Picture1, vbRed, "Block 2"
  34. End Sub
  35.  
  36. Private Sub Command3_Click()
  37.   ' carga coordenadas aleatorias y las muestra en un grafico
  38.  Dim Block() As Coordenadas
  39.   Dim F As Long
  40.   Picture1.Cls
  41.   CargaCoordenadasAleatorias Block, 100, 300
  42.   ' las mostramos en el textbox
  43.  Text1.Text = "Block Aleatorio" & vbCrLf & Block(0).X & ", " & Block(0).Y & vbCrLf
  44.   For F = 1 To UBound(Block)
  45.     Text1.Text = Text1.Text & Block(F).X & ", " & Block(F).Y & vbCrLf
  46.   Next F
  47.  
  48.   MuestraGrafico Block, Picture1, vbRed, "Block Aleatorio"
  49. End Sub
  50.  
  51. Private Function CargaCoordenadas(ByVal FicheroTXT As String, ByVal NumBlock As Long, Matriz() As Coordenadas) As Boolean
  52.   ' carga una matriz con las coordenadas del Block elegido y del fichero elegido
  53.  Dim NumFichero As Integer
  54.   Dim Linea As String
  55.   Dim BlockABuscar As String
  56.   Dim Coord() As String
  57.   Dim Encontrado As Boolean
  58.   BlockABuscar = "BLOCK " & NumBlock
  59.   ReDim Matriz(0)
  60.   On Local Error GoTo ErrorSub
  61.   NumFichero = FreeFile
  62.   Open FicheroTXT For Input As NumFichero
  63.   Do Until EOF(NumFichero)
  64.     Line Input #NumFichero, Linea
  65.     If Encontrado = False Then
  66.       If UCase$(Trim$(Linea)) = BlockABuscar Then
  67.         Encontrado = True
  68.         GoTo Otro
  69.       End If
  70.     End If
  71.     If Encontrado = True Then
  72.       If UCase$(Left$(Trim$(Linea), 5)) = "BLOCK" Then Exit Do
  73.       Coord = Split(Linea, ",")
  74.       ReDim Preserve Coord(1) ' nos aseguramos de que se ha creado la matriz
  75.      Matriz(UBound(Matriz)).X = Val(Coord(0))
  76.       Matriz(UBound(Matriz)).Y = Val(Coord(1))
  77.       ReDim Preserve Matriz(UBound(Matriz) + 1)
  78.     End If
  79. Otro:
  80.   Loop
  81. ErrorSub:
  82.   If Err.Number <> 0 Then MsgBox Err.Description
  83.   CargaCoordenadas = Encontrado
  84.   Err.Clear
  85.   On Local Error Resume Next
  86.   Close
  87.   If UBound(Matriz) > 0 Then ReDim Preserve Matriz(UBound(Matriz) - 1)
  88. End Function
  89.  
  90. Private Sub MuestraGrafico(Matriz() As Coordenadas, ByVal Picture As PictureBox, Optional ByVal sColor As Long = vbBlue, Optional ByVal Titulo As String = "")
  91.   Dim F As Long
  92.   Dim CoordAct As Coordenadas
  93.   On Local Error Resume Next
  94.   Picture.AutoRedraw = True
  95.   Picture.Print Titulo
  96.   CoordAct.X = (Picture.Width) / 2
  97.   CoordAct.Y = (Picture.Height) / 2
  98.   For F = 0 To UBound(Matriz)
  99.     Picture.Line (CoordAct.X, CoordAct.Y)-(CoordAct.X + Matriz(F).X, CoordAct.Y + Matriz(F).Y), sColor
  100.     CoordAct.X = CoordAct.X + Matriz(F).X
  101.     CoordAct.Y = CoordAct.Y + Matriz(F).Y
  102.   Next F
  103. End Sub
  104.  
  105. Private Sub CargaCoordenadasAleatorias(Matriz() As Coordenadas, Cantidad As Long, Optional ByVal MaxLen As Long = 250)
  106.   Dim F As Long
  107.   ReDim Matriz(Cantidad)
  108.   For F = 0 To Cantidad - 1
  109.     Matriz(F).X = Int(Rnd * (MaxLen * 2)) - MaxLen
  110.     Matriz(F).Y = Int(Rnd * (MaxLen * 2)) - MaxLen
  111.   Next F
  112. End Sub
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 11/05/2011 a las 15:26
  #8 (permalink)  
Antiguo 12/05/2011, 07:16
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Ya sabia como que me faltaba algo...
  #9 (permalink)  
Antiguo 12/05/2011, 07:58
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

A ver si essolo nos aclara el tema

Yo de todas formas al menos me he entretenido un buen rato y algo he aprendido.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #10 (permalink)  
Antiguo 12/05/2011, 10:25
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola:
Agradesco mucho sus respuestas, hoy mientras tomaba el café, lei los codigos, aunque tengo que estudiarlos, asi de pontro me doy cuenta que hay una que otra linea en las que me surgira la duda, pero en este momento, y disculpen pero es que soy novato aun; deseo preguntar a pkj, en la linea:
Private Sub CargaCoordenadasAleatorias(Matriz() As Coordenadas, Cantidad As Long, Optional ByVal MaxLen As Long = 250)
A que obedece el 250?
Nuevamente, estoy muy agradecido con ustedes; en este momento tengo que ir a laborar, pero a mi regreso comensare a analizar linea por linea y resolver el tema; me llevara unos dias por el tiempo de que dispongo, pero lo hare lo mas rapido posible. Por fabor no se pierdan sino quien me ayuda despues, jejeje.
Gracias.
Saludos.
  #11 (permalink)  
Antiguo 12/05/2011, 11:31
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

La sub CargaCoordenadasAleatorias y el command3 los puedes ignorar. Son solo un experimento en que se crea el grafico con valores aleatorios.

El valor que asignes a MaxLen es el valor máximo, positivo o negativo, que puede tener una coordenada. De ese modo las líneas se pueden hacer más largas o más cortas. El valor 250 es el valor por defecto en caso de no incluirse al hacer la llamada a la sub, ya que lo he declarado como opcional.

Que se dé bien.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #12 (permalink)  
Antiguo 23/05/2011, 07:43
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola: primer intento fallido.
pkj:
al usar tu codigo como tal, me da error:
número de archivo, o acceso a la ruta incorrecto.
coloque el archivo Llamado Fichero, e incluso, FicheroTXT, en c: y en la carpeta donde guarde el ejemplo que expones, sin resultado alguno.
Pensando que no leia el archivo, coloque al form un listbox para vacear en él , el contenido de txt; y si lo hizo, pero cambiando:
Do Until EOF(NumFichero) por Do While Not EOF(NumFichero).
Aquí lo curioso es que aveces sólo lee hasta el bloque1 y aveces no lee nada.
y no grafica.
En en boton 2 cuando grafica, solo pone una linea; cuando se supone que deberia de formar una figura. Y el boton 3 funciona muy bien.

Y al modificar más lineas: Private Function CargaCoordenadas(ByVal FicheroTXT As String, ByVal NumBlock As Long, Matriz() As Coordenadas) As Boolean
He de suponer que "FicheroTXT" es la variable donde guardo el nombre de mi .txt?
Esto es correcto? porque no me hace gesto alguno:
FicheroTXT = File1.Path & "\" & File1.FileName

Private Function CargaCoordenadas(ByVal FicheroTXT As String, ByVal NumBlock As Long, Matriz() As Coordenadas) As Boolean
' carga una matriz con las coordenadas del Block elegido y del fichero elegido
Dim NumFichero As Integer
Dim Linea As String
Dim BlockABuscar As String
Dim Coord() As String
Dim Encontrado As Boolean
BlockABuscar = "BLOCK " & NumBlock
ReDim Matriz(0)
On Local Error GoTo ErrorSub
NumFichero = FreeFile
FicheroTXT = File1.Path & "\" & File1.FileName
Open FicheroTXT For Input As NumFichero
Do while not EOF(NumFichero)
Line Input #NumFichero, Linea
If Encontrado = False Then
If UCase$(Trim$(Linea)) = BlockABuscar Then
Encontrado = True
GoTo Otro
End If
End If
If Encontrado = True Then
If UCase$(Left$(Trim$(Linea), 5)) = "BLOCK" Then Exit Do
Coord = Split(Linea, ",")
ReDim Preserve Coord(1) ' nos aseguramos de que se ha creado la matriz
Matriz(UBound(Matriz)).X = Val(Coord(0))
Matriz(UBound(Matriz)).Y = Val(Coord(1))
ReDim Preserve Matriz(UBound(Matriz) + 1)
End If
Otro:
Loop
ErrorSub:
If Err.Number <> 0 Then MsgBox Err.Description
CargaCoordenadas = Encontrado
Err.Clear
On Local Error Resume Next
Close
If UBound(Matriz) > 0 Then ReDim Preserve Matriz(UBound(Matriz) - 1)
End Function

lokoman: de primer instancia tu codigo funciona bien; sólo que no he tenido el suficiente tiempo para analizarlo y acoplarlo a mi aplicación. Te ruego me des un par de días más y lo comentare.
Más ideas y sugerencias o correcciones seran muy agradecidas de mi parte.
Saludos.
  #13 (permalink)  
Antiguo 23/05/2011, 08:18
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Cita:
Iniciado por essolo Ver Mensaje
Hola: primer intento fallido.
Aquí lo curioso es que aveces sólo lee hasta el bloque1 y aveces no lee nada.
y no grafica.
No será que algunos archivos dicen: "BLOCK" y otros "BLOQUE"?

Código vb:
Ver original
  1. FicheroTXT = File1.Path & "\" & File1.FileName
La ruta es correcta, debe funcionar bien
  #14 (permalink)  
Antiguo 24/05/2011, 09:31
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

Posiblemente el fallo lo tienes en esta linea:

FicheroTXT = File1.Path & "\" & File1.FileName

Ya que si el fichnero esta en la raiz del disco (y dices que lo has puesto en C:) el valor de
file1.path ya incluye la barra inversa (\), y al sumarle otra barra ya son 2 barras juntas (\\).

Yo por si acaso suelo hacer esto:

if right$(file1.path,1)="\" then
FicheroTXT = File1.Path & File1.FileName
else
FicheroTXT = File1.Path & "\" & File1.FileName
end if

Suerte
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #15 (permalink)  
Antiguo 30/05/2011, 08:14
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola:
Les pido una amplia disculpa, al decir "bloque" hablo de forma general; el texto sí dice block1, block2, ,etc; tratare de escribir tal cual escribo el codigo para no mal enteder, mil disculpas.
Utilizando el codigo de locoman en su respuesta #6, tengo un inconveniente. Cuando trato de centrar las coordenadas en el picture me da error, este es el codigo:

Option Explicit

Dim strRUTA_ARCH As String
Dim DATA As String
Dim xA As Integer
Dim yA As Integer
Dim x As Integer
Dim y As Integer
Dim CONT As Integer
Dim I As Integer
Dim HAY_DATOS As Boolean

Private Sub Command1_Click()

HAY_DATOS = False
CONT = 0
I = 1
strRUTA_ARCH = App.Path & "\COORDENADAS.TXT"

Open strRUTA_ARCH For Input As #1
Do While EOF(1) = False
Line Input #1, DATA

If Trim(DATA) = "block " & I Then
HAY_DATOS = True
I = I + 1
Else
If HAY_DATOS = True Then
xA = (Picture1.Width / 2)
yA = (Picture1.Height / 2)
x = Mid(DATA, 1, InStr(1, DATA, ",") + 1)
y = Mid(DATA, InStr(1, DATA, ",") + 1)
CONT = CONT + 1

If CONT = 2 Then
Picture1.Line (xA, yA)-(x, y), vbBlue
CONT = 0

Else
xA = x
yA = y
End If
End If
End If
DoEvents
Loop
Close #1
End Sub


Private Sub Command3_Click()
Picture1.Cls
End Sub

Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.ScaleMode = 3
Picture1.AutoRedraw = True

End Sub

Private Sub Command2_Click()
Picture1.Line (30, 25)-(30, 150), vbBlue
Picture1.Line (30, 150)-(200, 150), vbBlue
Picture1.Line (200, 150)-(200, 25), vbBlue
Picture1.Line (200, 25)-(30, 25), vbBlue

End Sub

Segun esto, al dar click en command1, debería formar un cuadro en el centro del picture; pero lo que hace son 4 linea desde el centro. He puesto un command2 para que se vea el cuadro a formar; " ahora que si das click en ambos command, veras un bonito prisma, jejeje".
Locoman, si no es molesto, podrías explicarme esta linea?: x = Mid(DATA, 1, InStr(1, DATA, ",") + 1).
En que estoy errado?, las coordenadas las puse positivas, para que no salgan del picture, ademas haría una solo linea y desbordaría por un lado, si algunas son negativas.
Como siempre, muchas gracias de antemano.
Saludos.
  #16 (permalink)  
Antiguo 30/05/2011, 14:51
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: txt y coordenadas en vb6

Chequea el CODE, el CMD1 (el que carga el archivo) forma el cuadro al igual que el CMD de ejemplo que pusiste:

Código vb:
Ver original
  1. Private Sub cmd_Click()
  2.     pic.Line (30, 25)-(30, 150), vbBlue
  3.     pic.Line (30, 150)-(200, 150), vbBlue
  4.     pic.Line (200, 150)-(200, 25), vbBlue
  5.     pic.Line (200, 25)-(30, 25), vbBlue
  6. End Sub
  7.  
  8. Private Sub cmd1_Click()
  9.     Dim strRUTA_ARCH As String
  10.     Dim DATA As String
  11.     Dim xA As Integer
  12.     Dim yA As Integer
  13.     Dim x As Integer
  14.     Dim y As Integer
  15.     Dim CONT As Integer
  16.     Dim I As Integer
  17.     Dim HAY_DATOS As Boolean
  18.  
  19.     HAY_DATOS = False
  20.     CONT = 0
  21.     I = 1
  22.     strRUTA_ARCH = "D:\Me\Down\New\Exe\COORDENADAS.TXT"
  23.  
  24.     Open strRUTA_ARCH For Input As #1
  25.     Do While EOF(1) = False
  26.         Line Input #1, DATA
  27.  
  28.         If Trim(DATA) = "block " & I Then
  29.             HAY_DATOS = True
  30.             I = I + 1
  31.         Else
  32.             If HAY_DATOS = True Then
  33. '                xA = (pic.Width / 2)
  34. '                yA = (pic.Height / 2)
  35.  
  36.                 If CONT = 0 Then
  37.                     xA = Mid(DATA, 1, InStr(1, DATA, ",") + 1)
  38.                     yA = Mid(DATA, InStr(1, DATA, ",") + 1)
  39.                 End If
  40.                
  41.                 x = Mid(DATA, 1, InStr(1, DATA, ",") + 1)
  42.                 y = Mid(DATA, InStr(1, DATA, ",") + 1)
  43.                
  44.                 CONT = CONT + 1
  45.  
  46.                 If CONT = 2 Then
  47.                     pic.Line (xA, yA)-(x, y), vbBlue
  48.                     Debug.Print xA, yA
  49.                     Debug.Print x, y
  50.                    
  51.                     CONT = 0
  52.  
  53.                 Else
  54.                     xA = x
  55.                     yA = y
  56.                 End If
  57.             End If
  58.         End If
  59.         DoEvents
  60.     Loop
  61.     Close #1
  62. End Sub
  63.  
  64. Private Sub cmd3_Click()
  65.     pic.Cls
  66. End Sub
  67.  
  68. Private Sub Form_Load()
  69.     Me.ScaleMode = 3
  70.     pic.ScaleMode = 3
  71.     pic.AutoRedraw = True
  72. End Sub

La linea:
Código vb:
Ver original
  1. x = Mid(DATA, 1, InStr(1, DATA, ",") + 1)
  2. y = Mid(DATA, InStr(1, DATA, ",") + 1)

X=Te extrae el numero que esta antes de la coma ","
Y=Te extrae el numero que esta despues de la coma ","

La funcion MID te permite extraer de un string una cantidad de caracteres, en donde le indicas la posicion inicial y la final

La funcion INSTR te trae de un string la posicion inicial del caracter o string que buscas, le pones la posicion inicial, luego el string que contiene los datos y despues el string que quieres buscar en los datos

El +1 al final es para que me sume 1 posicion a la que me trae el INSTR, ej. si me trae la posicion 3, el proximo caracter que deseo leer esta en la posicion 4, por eso el +1 al final

Última edición por lokoman; 30/05/2011 a las 15:00
  #17 (permalink)  
Antiguo 30/05/2011, 21:14
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola:
No me dio resultado, el codigo que modificaste; al final quedo asì:

y = yb + Mid(DATA, InStr(1, DATA, ",") + 1) / 2
x = xb + Mid(DATA, 1, InStr(1, DATA, ",") + 1) / 2

Se agregò dos variables que pudieran guardar las ùltimas coordenadas leìdas, y poder continuar con el IF; y se dividiò / 2, porque desbordaba en el picture.

En el Load las nuevas variables quedan asì:

xb = (Picture1.Width / 2)
yb = (Picture1.Height / 2)

Esto indica que la primer coordenada, comenzarà al centro del picture.
Bueno, todo esto segùn yo; pero esta funcionando. Mañana comenzare a trabajar en los colores, que me basare en sus codigos, para lograrlo.
Respecto a lo de los command's, los puse asi para que al dar click en el 1º, vieramos que no hacia lo que tenìa que hacer.
El 2º boton, sì lo hacía; pero teniamos que escribir por codigo, linea por linea.
Ese no era el objetivo, el objetivo, es el codigo que vamos armando.
Nuevamente gracias, y no se alejen demaciado jejejeje.
Saludos
  #18 (permalink)  
Antiguo 31/05/2011, 14:19
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: txt y coordenadas en vb6

Sigo sin tener claro lo que intentas. Aquí te dejo un enlace con el proyecto que hice.

http://www.megaupload.com/?d=XMDAVBF2

Por si te sirve intentaré explicarlo un poco.
Comprueba que los datos de tus ficheros están ordenados exáctamente como el txt que usé de ejemplo y que incluyo en el paquete.
Sobre todo comprueba que la palabra block y el número que la acompaña tienen un espacio entre medias, porque el programa va a buscarlo. Si tus ficheros no son iguales nunca te va a funcionar con ellos sin modificar el código.
Como verás yo dejé incluso los comentarios que pusiste en el ejemplo, y verás que cuando el programa encuentra valores incoherentes escribe coordenadas 0, 0. Pruébalo.

El command1 muestra en el textbox todos los bloques y coordenadas sacadas del fichero txt.
El command2 muestra una linea porque todas las coordenadas del block2 son hacia la izquierda y hacia abajo.
El command3 solo muestra un garabato y creo que ya has comprendido lo que hace.

Reemplaza el fichero "Fichero.txt" de mi proyecto por el tuyo o simplemente copia el contenido del tuyo en el mio, (verificando antes lo que te he comentado) y si el formato es correcto debería mostrar el dibujo centrado en el picturebox.
Una vez que veas que funciona lo aplicas a tu proyecto como mejor veas.

Las subs no tienes que tocarlas. Es en el command 1 y 2 donde debes poner bien el nombre y camino al fichero.
Ejmp:
Código vb:
Ver original
  1. Private Sub Command2_Click()
  2.   ' carga las coordenadas del Block 2 y las muestra en un grafico
  3.  Dim Block() As Coordenadas
  4.   Picture1.Cls
  5.   CargaCoordenadas "c:\tucarpeta\tuFichero.txt", 2, Block
  6.   MuestraGrafico Block, Picture1, vbRed, "Block 2"
  7. End Sub

Solo tienes que cambiar los 2 primeros parámetros de la llamada a la sub cargacoordenadas.
El primer parámetro es el camino a tu fichero y el segundo el numero de bloque a cargar.
El tercer parámetro es la matriz donde te devuelven las coordenadas del bloque elegido, y se manda despues a la funcion Muestragrafico como primer parámetro. No hay que tocarlo.

Si necesitas más explicaciones pregunta pero sé conciso y concreto o nos volverás locuelos.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #19 (permalink)  
Antiguo 20/06/2011, 21:06
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

hola:
He intentedo dar color diferente a cada block pero no lo logro; intente algo como:

enum color
azul
rojo
blanco
amarillo
verde
end enum
dim block as long

HAY_DATOS = False
CONT = 0
I = 1
strRUTA_ARCH = "D:\Me\Down\New\Exe\COORDENADAS.TXT"

Open strRUTA_ARCH For Input As #1
Do While EOF(1) = False
Line Input #1, DATA

for block = 1 to ubond(color)
If Trim(DATA) = "block(color) " & I Then
HAY_DATOS = True
I = I + 1
exit for
else
etc...
etc...
etc...

Evidentemente hay algo garrafal, la cuestion es que no se que es.
Ya he leido algunos ejemplos pero no me sale.
Nuevamente les ruego por ayuda. de antemano muchas gracias.
Saludos.
  #20 (permalink)  
Antiguo 01/08/2011, 20:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: txt y coordenadas en vb6

Hola:
ya he logrado darle color a cada block:
al detectar mas de una coordenadas comensaria a dibujar lineas
If CONT = 2 Then
pic.Line (xA, yA)-(x, y), vbBlue
Lo que hice fue hacer un function linea () y dentro coloque un select case con 20 opsiones
Select Case I
Case 1
Picture1.Line (xA, yA)-(x, y), vbWhite
y que correspondan segun el valor de I:
If Trim(DATA) = "block " & I Then
.....
.....
.....
If CONT = 2 Then
linea
aqui en el function linea he colocado el select case, hasta aqui todo va funcionando bien.
Pero tengo un inconveniente:
en esta linea:
pic.Line (xA, yA)-(x, y), vbBlue
como cambio el valor de , vbBlue, en tiempo de ejecucion, esto se puede?, como podria ser esto?
nuevamente agradezco de antemano cualquier informacion que puedan proporcionarme.
Saludos.

Etiquetas: coordenadas, txt, vb6
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.