Foro de programacion

programacion
RegistrateNewsletter
zonas:adsl:area-flash:area-php:area-asp:area-vb:area-photoshop:area-Vfox:area-Soft:area.:Mas
+ de 45.000 registrados
Secciones: Manuales-Diseño-Trucos-Recursos-Foros/Comunidad-Software-CodigoFuente-compras
AñadenosFavoritos
Secciones: Herramientas-Libros-Webmasters/Google-Noticias -Biblioteca-Cursos--Directorio-EmpleoN
Foros de Programacion - Cominidad de Programadores
 
Foros de programacion
es una web de ayuda a los programadores y webmasters, la buena utilizacion del foro sera el premio que tendremos para q este elemento sea util para los usuarios.

Colaborar: Si deseais ser moderadores de alguno de los foros estaremos encantados en que nos presteis esa ayuda , tan solo es necesario tener algun conocimiento
del tema que trata el foro y tener ganas ganas de colaborar para ser moderador mandar un mail indicando de que foro deseais ser moderador

Deseais que pongamos algun nuevo foro de programacion? ¿quieres crear un nuevo foro y ser su moderador? ponte en contacto con nosotros

Retroceder   Foros > Bases de Datos > visual fox pro

Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 30 de abril,2005, 22:08
Junior Member
 
Fecha de Ingreso: abr 2005
Mensajes: 2
Predeterminado Sobre manejo de archivos, URGENTE!!!

Saludos a todos!

Tengo un gran problema y es realmente urgente; y espero que me puedan ayudar.

Estoy desarrollando una aplicación, que usa el puerto serial para comunicarme con un equipo de medición de fibra óptica. Para ello, empleo el MSComm y me funciona sin problemas, puedo enviarle comandos al equipo y este me responde y hace x o y función, hasta alli sin problemas.

Ese equipo de medición es un OTDR (un equipo que realiza reflectometrías); el punto es que ese equipo es capaz de guardar archivos de las cosas que hace (la reflectometría). Estos archivos están regidos por un estandar (Telcordia Bellcore), en fin... como se darán cuenta ese tipo de archivo debe estar estructurado.

El punto, es que el equipo me manda el archivo; pero en los extremos del mismo introduce ciertos datos, algo así como para comprobar que ha llegado correctamente. Les explico más o menos de que se trata.

El archivo que me manda el equipo tiene la siguiente estructura:

#520056[a partir de este corchete está el bloque de bits definidos por el estándar y termina el bloque en el siguiente corchete]<END>vbCrVblf

#: Representa algo así como un inicio de trama.

El segundo caracter (para el ejemplo mostrado 5); me representa el número de digitos que debo leer a continuación; como se verá, a despues del 5, está 20056 que está compuesto por cinco digitos.

Ese número, el 20056 (en este caso de 5 digitos); me representa el número de bytes de datos que siguen; y que en sí dan inicio al bloque definido por el estándar (inicio del corchete)

Una vez leidos estos 20056 bytes de datos (fin del corchete), vienen los caracteres <END> y un retorno de carro y un avance de línea.

Lo que necesito hacer es almacenar unicamente estos 20056 bytes de datos en un archivo, que debo crear y cuya extención debe ser .sor

Quizás mi instrucción no fue lo más precisa posible, así que les pego las instrucciones que están en el manual del equipo.

--------------------------------------------------
How to Upload a Bellcore File from the current trace

1. Upload the file from the OTDR
Send the query MMEM:LOAD:FILE? "xxxxxxx.sor"

2. Read in the first character
This character should be a hash (#).

3. Read in the next character
This character should be an integer, m, giving the number of digits you should now read.

4. Read in the next m characters
This series of characters should form an integer, n, giving the number of data bytes that follow.

5. Read in the next n data bytes, and store them.
6. Read until the final <END>.
-----------------------------------------------------

Todo eso, lo he tratado de traducir a VB6.0, y he hecho esto:

sPrimerCaracter = Left(Rxbuffer, 1) 'Leo el primer caracter de lo que recibi del equipo
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - 1) 'Elimino el primer carácter de la cadena, ya que no me interesa

iSegundoCaracter = Left(Rxbuffer, 1) 'Leo el segundo caracter que me representa cuantos digitos debo leer a continuación
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - 1) 'Borro el segundo caracter de la cadena

iNumeroDeBytesALeer = Left(Rxbuffer, iSegundoCaracter) 'Leo el número de bytes de datos, por el que debera está compuesto del archivo
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - iSegundoCaracter) 'Elimino esos dígitos de la trama, para que únicamente me quede "el inicio del corchete"
Rxbuffer = Left(Rxbuffer, iNumeroDeBytesALeer) 'Leo los bytes que se especificaron de la cadena.

Open sArchivo For Output As #1 'Creo un archivo donde se van a guardas esos datos
Print #1, Rxbuffer,;
Close #1


El resto de la información del buffer no me interesa; teoricamente todo lo hace perfectamente y de hecho es así, pero el archivo nunca llega a abrir; es decir, el programa asociado a ese tipo de datos me dice que no se puede abrir, que no la reconoce.

Ahora bien, ese equipo tiene la posibilidad de guardar esos archivos en un disquete; por ende, lo que hago es comparar, que fué lo que guardó en el el disquette y que es lo que yo estoy recibiendo en la PC, el resultado, a nivel estructural del archivo es el mismo, es decir, los archivos son iguales; la diferencia es que uno lo abre y otro no

Las conclusiones que he podido obtener de este problema son las siguientes y las preguntas que me he formulado son las siguientes:

1. Debido a que el tipo de datos que envia/recibe el MsComm son Variant, quizas la estructura de dicho formato de datos este alterando algo.
(es algo irracional esa deducción, pero bueno, igual la he pensado). La pregunta sería, como almacenar lo que me está entrando al puerto en una variable tipo byte? es posible eso?

2. ¿Es correcta la forma en la cual estoy almacenando los datos en el archivo?, No lo sé, a la final, el archivo que voy a guardar está comprendido por una serie de caracteres "extraños", pero en fin, lo que me interesan son los bytes de el archivo; el programa que interpreta esos archivos se encargará de descifrarlo.

3. Conocen alguna instrucción que sea capaz de reconocer dentro de una cadena de bytes, la presencia de el <END>?, lo digo, para guardar el archivo hasta que se inicie esa cadena.

4. La forma de crear el archivo es la correcta?, lo pregunto porque el print, se que "edita" los bytes, en caso de que reconozca alguna estructura de datos definida.

5. He usado el acceso binario a archivos, pero al inicio de la escritura, me coloca caracteres en el archivo que no deben estar ya que de lo contrario no se abre el archivo. ¿Existe alguna forma de evitar que se coloquen estos caracteres antes de que se coloque lo que está en la variable que quiero almacenar?

Open sArchivo For Binary As #2
Put #2, , Rxbuffer
Close #2

7. Según MSDN, para trabajar un archivo en modo binario recomiendan usar una matriz cuyos typos de datos, sean unicamente binarios, la pregunta es, como introducir una cadena de datos que esta contenida en una variable Variant, en una matriz de bytes?. Lo he intentado por todos los medios, y me da el error de que son tipos de datos diferentes. Alguna idea?

y por ultimo... pueden ayudarme? sugerencias, opiniones, comentarios... todos seran bien recibidos. Estoy usando VB6

Saludos desde Venezuela!
José Manuel
Responder Citando
  #2 (permalink)  
Antiguo 04 de mayo,2005, 15:23
Guest
 
Mensajes: n/a
Predeterminado Re: Sobre manejo de archivos, URGENTE!!!

Cita:
Iniciado por jmasso
Saludos a todos!

Tengo un gran problema y es realmente urgente; y espero que me puedan ayudar.

Estoy desarrollando una aplicación, que usa el puerto serial para comunicarme con un equipo de medición de fibra óptica. Para ello, empleo el MSComm y me funciona sin problemas, puedo enviarle comandos al equipo y este me responde y hace x o y función, hasta alli sin problemas.

Ese equipo de medición es un OTDR (un equipo que realiza reflectometrías); el punto es que ese equipo es capaz de guardar archivos de las cosas que hace (la reflectometría). Estos archivos están regidos por un estandar (Telcordia Bellcore), en fin... como se darán cuenta ese tipo de archivo debe estar estructurado.

El punto, es que el equipo me manda el archivo; pero en los extremos del mismo introduce ciertos datos, algo así como para comprobar que ha llegado correctamente. Les explico más o menos de que se trata.

El archivo que me manda el equipo tiene la siguiente estructura:

#520056[a partir de este corchete está el bloque de bits definidos por el estándar y termina el bloque en el siguiente corchete]<END>vbCrVblf

#: Representa algo así como un inicio de trama.

El segundo caracter (para el ejemplo mostrado 5); me representa el número de digitos que debo leer a continuación; como se verá, a despues del 5, está 20056 que está compuesto por cinco digitos.

Ese número, el 20056 (en este caso de 5 digitos); me representa el número de bytes de datos que siguen; y que en sí dan inicio al bloque definido por el estándar (inicio del corchete)

Una vez leidos estos 20056 bytes de datos (fin del corchete), vienen los caracteres <END> y un retorno de carro y un avance de línea.

Lo que necesito hacer es almacenar unicamente estos 20056 bytes de datos en un archivo, que debo crear y cuya extención debe ser .sor

Quizás mi instrucción no fue lo más precisa posible, así que les pego las instrucciones que están en el manual del equipo.

--------------------------------------------------
How to Upload a Bellcore File from the current trace

1. Upload the file from the OTDR
Send the query MMEM:LOAD:FILE? "xxxxxxx.sor"

2. Read in the first character
This character should be a hash (#).

3. Read in the next character
This character should be an integer, m, giving the number of digits you should now read.

4. Read in the next m characters
This series of characters should form an integer, n, giving the number of data bytes that follow.

5. Read in the next n data bytes, and store them.
6. Read until the final <END>.
-----------------------------------------------------

Todo eso, lo he tratado de traducir a VB6.0, y he hecho esto:

sPrimerCaracter = Left(Rxbuffer, 1) 'Leo el primer caracter de lo que recibi del equipo
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - 1) 'Elimino el primer carácter de la cadena, ya que no me interesa

iSegundoCaracter = Left(Rxbuffer, 1) 'Leo el segundo caracter que me representa cuantos digitos debo leer a continuación
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - 1) 'Borro el segundo caracter de la cadena

iNumeroDeBytesALeer = Left(Rxbuffer, iSegundoCaracter) 'Leo el número de bytes de datos, por el que debera está compuesto del archivo
Rxbuffer = Right(Rxbuffer, Len(Rxbuffer) - iSegundoCaracter) 'Elimino esos dígitos de la trama, para que únicamente me quede "el inicio del corchete"
Rxbuffer = Left(Rxbuffer, iNumeroDeBytesALeer) 'Leo los bytes que se especificaron de la cadena.

Open sArchivo For Output As #1 'Creo un archivo donde se van a guardas esos datos
Print #1, Rxbuffer,;
Close #1


El resto de la información del buffer no me interesa; teoricamente todo lo hace perfectamente y de hecho es así, pero el archivo nunca llega a abrir; es decir, el programa asociado a ese tipo de datos me dice que no se puede abrir, que no la reconoce.

Ahora bien, ese equipo tiene la posibilidad de guardar esos archivos en un disquete; por ende, lo que hago es comparar, que fué lo que guardó en el el disquette y que es lo que yo estoy recibiendo en la PC, el resultado, a nivel estructural del archivo es el mismo, es decir, los archivos son iguales; la diferencia es que uno lo abre y otro no

Las conclusiones que he podido obtener de este problema son las siguientes y las preguntas que me he formulado son las siguientes:

1. Debido a que el tipo de datos que envia/recibe el MsComm son Variant, quizas la estructura de dicho formato de datos este alterando algo.
(es algo irracional esa deducción, pero bueno, igual la he pensado). La pregunta sería, como almacenar lo que me está entrando al puerto en una variable tipo byte? es posible eso?

2. ¿Es correcta la forma en la cual estoy almacenando los datos en el archivo?, No lo sé, a la final, el archivo que voy a guardar está comprendido por una serie de caracteres "extraños", pero en fin, lo que me interesan son los bytes de el archivo; el programa que interpreta esos archivos se encargará de descifrarlo.

3. Conocen alguna instrucción que sea capaz de reconocer dentro de una cadena de bytes, la presencia de el <END>?, lo digo, para guardar el archivo hasta que se inicie esa cadena.

4. La forma de crear el archivo es la correcta?, lo pregunto porque el print, se que "edita" los bytes, en caso de que reconozca alguna estructura de datos definida.

5. He usado el acceso binario a archivos, pero al inicio de la escritura, me coloca caracteres en el archivo que no deben estar ya que de lo contrario no se abre el archivo. ¿Existe alguna forma de evitar que se coloquen estos caracteres antes de que se coloque lo que está en la variable que quiero almacenar?

Open sArchivo For Binary As #2
Put #2, , Rxbuffer
Close #2

7. Según MSDN, para trabajar un archivo en modo binario recomiendan usar una matriz cuyos typos de datos, sean unicamente binarios, la pregunta es, como introducir una cadena de datos que esta contenida en una variable Variant, en una matriz de bytes?. Lo he intentado por todos los medios, y me da el error de que son tipos de datos diferentes. Alguna idea?

y por ultimo... pueden ayudarme? sugerencias, opiniones, comentarios... todos seran bien recibidos. Estoy usando VB6

Saludos desde Venezuela!
José Manuel
If Index = 20 Or Index = 27 Or Index = 42 Or Index = 50 Or Index = 55 Or Index = 65 Or Index = 80 Or Index = 90 Then ' si el indice coincide con un cuadro negro saltamos tal cuadro
Text1(Index + 2).SetFocus
Else

If Text1(Index).Index = 95 Then ' si llegamos al final saltamos al boton
Command1.SetFocus
Else
Text1(Index + 1).SetFocus ' sino pasamos de uno en uno

End If

End If
cont = cont + 1
Else
Text1(i).Text = "" ' sino es igual el contenido lo ponemos en blanco
End If


End If

Next i3 ' fin del recorrido

If cont = 95 Then
MsgBox "fin"
End If
End Sub

Public Sub solucion2()
If solucion = True Then ' si solucion es true entonces
For i = 0 To 95 Step 1 ' recorremos la matriz de textbox
Text1(i).Text = text2(i + 96).Text ' ' con esto mostramos la solucion completa al pulsar el boton de solucion

Next i 'fin del recorrido
cont = 95
solucion = False ' ponemos solucion a false
End If

End Sub
Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Las caritas están Activado
El codigo [IMG] está Activado
Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Activado
Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Re: contar registros de una variable Felipe visual fox pro 1 18 de mayo,2005 12:41
Re: contar registros de una variable visual fox pro 0 30 de abril,2005 18:23
contar registros de una variable ThanatosMK visual fox pro 0 30 de abril,2005 16:51
Valor de una variable a través de otra variable bi23471 visual basic 0 01 de enero,1970 01:00
Re: Valor de una variable a través de otra variable bi23471 visual basic 0 01 de enero,1970 01:00

Programacion : LWPI Solorecursos I programacion I abcdatos I TrucosTecnicos I servicios gratisI ofertas de ADSL Ipueblos20
Areas exclusivas:cursosIofertasIadslIwebtutoriales ISMSareaItutorialesItrucos de windows IgooglemaniaI programatium.netIcompras
noticias: SaludIOcio/cineIMusicaIMotorIDeportes IJuegos I FinanzasIMovilesIEnergiaIEcologiaITech-yIMujerIMACISaludIViajes-Pueblos
site programatium.com : site1 - site2 - site3 - site4 - site5 - site6 - site7 - site8
manuales Sugiere un manual para esta seccion
who's online
Linkanos
www.programatium.com© 1999 - web esta optimizada para Microsoft explorer 6.0
tutoriales

Content Relevant URLs by vBSEO 3.2.0