![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Gracias sitrico
Gracias, pero cambiando en el programa el tipo de variable a cardinal o longword me sigue ocurriendo lo mismo
Saludos |
|
#2
|
|||
|
|||
|
Sigo teniendo el mismo problema, estoy desistiendo
Sigo teniendo el mismo problema. Ya casi me siento inutil, pues aunque he controlado todo lo que me habeis dicho que estudiase. Me he topado con este ultimo problema y sigo sin resolverlo. Por lo que se deduce que si no pillo un golpe de ayuda voy a tener que abandonar este proyecto..
Saludos de todos modos |
|
#3
|
||||
|
||||
|
socger, pero exactamente ¿qué valores existen en esa posición en el fichero a leer, qué resultado deberías obtener y qué resultado obtienes?
p.d.: no te rindas, muchas veces es mejor apartarse un rato del problema, dedicarse a descansar o algún hobby y luego volver con más energías para enfrentarse al problema.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
Encontrarse en esta situación es muy típico de nosotros (los programadores) socger. El consejo de Casimiro es muy bueno.
Casimiro, el valor que se obtiene en algunos casos era negativo, y en otros, se obtiene una fecha muy cerca de 1900. Con el comentario de sítrico, todo queda mucho más claro: el integer llega hasta un valor de 0..2^16-1 cuando encuentra un valor más grande en el archivo, el tipo integer devuelve un número negativo (interpretando erróneamente el valor guardado. Por ello debe usarse el LongWord. Por otra parte, creo haber leído en el pdf, que la fecha en la que se basa es 1970, es decir, ese número guardado, son los días transcurridos desde 1/01/1970 (lo digo de memoria, favor de mirar el pdf para comprobarlo) y como sabemos, el calendario del ordenador se basa en 1900, por tanto, a ese número obtenido habría que sumarle 70 años para obtener el valor correcto. Yo, aunque lo intenté, tampoco obtuve los resultados esperados, muy probablemente porque usaba un Integer en lugar del LongWord o Cardinal. Son muchos detalles los que hay que tener en cuenta Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#5
|
||||
|
||||
|
Pues con esas modificaciones tampoco va
![]() Cita:
![]() Incluso miré sin sumar el 1970 ... a ver si daba fechas mejores... pero nop (Veasé la rutina devolver_fecha) He añadido un par de lineas de debug: "Fecha sumando 1970" y "Fecha partiendo de 1900". Lo hice porque ya dudaba que la fecha base de un TTime_Real fuese el 01/01/1970 Estos son los datos que obtengo para el conductor diego Antonio: Código:
Segundos leidos de archivo 2150951235
Valor en dias obtenido: 24.895,27 (unos 68 años más o menos)
Fecha sumando el 1970: 28/02/2038 06:27:15
Fecha partiendo de 1900: 27/02/1968 06:27:15
*** Fecha en que se expidió la tarjeta: 28/02/2038 06:27:15
Segundos leidos de archivo 14935875
Valor en dias obtenido: 172,87
Fecha sumando el 1970: 22/06/1970 20:51:15
Fecha partiendo de 1900: 20/06/1900 20:51:15
*** Fecha primer día de validez de la tarjeta: 22/06/1970 20:51:15
Segundos leidos de archivo 3559245
Valor en dias obtenido: 41,19
Fecha sumando el 1970: 11/02/1970 04:40:45
Fecha partiendo de 1900: 09/02/1900 04:40:45
*** Fecha en la que termina la validez de la tarjeta: 11/02/1970 04:40:45
*** Apellidos/nombre titular de la tarjeta: MIÑANO MORENO, DIEGO ANTONIO
- La tarjeta se expidió hace 68 años más o menos desde la fecha base - Fecha primer día de validez: 172 días más o menos desde la fecha base - Fecha termina la validez: 41 dias desde la fecha base Causas de que eso no vaya bien: - Estamos olvidando un detalle del famoso pdf - No está leyendo bien del archivo (aunque no da errores de lectura, puede que esté interpretando datos que no deberían leerse así). - Las fechas no parten desde el 1970, sino de otra fecha. (esto es improbable, ya que lo dice expresamente el pdf, salvo error tipográfico ).- He modificado las líneas ReadBuffer, ya que ponías a mano el número de bytes a leer, yo he puesto sizeof(Tipo_de_registro). - También he modificado la rutina devolver_fechas. ... pero seguimos igual que antes .Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 10-10-2007 a las 20:56:21. |
|
#6
|
||||
|
||||
|
Basándome en el programita de Lepe, he hecho algunas pruebas y desde luego que si es desde 1970, no cuadran las fechas.
¿Puede ser que no se estén leyendo los datos correctos?, casi seguro que es eso. No he revisado la parte que lee el fichero, he supuesto que está leyendo los bytes correctos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 13-06-2007 a las 00:54:42. |
|
#7
|
||||
|
||||
|
Yo si hice 1 sola traza de la rutina de lectura; lo hace bien.
Lo que fastidia bastante, es que el resto de datos de ese registro TCard_Identification lo devuelve correctamtente. Código:
card_Issuing_Member_State: Byte; // NationNumeric, ... 1 byte INTEGER(0..255) por defecto (00) ver apdo 2.72. NationNumeric
card_Number: TCard_Number_Conductor; // CardNumber ... 16 byte por defecto (20..20) ver apdo. 2.21 CardNumber
card_Issuing_Authority_Name: TName; // Name, ... 36 byte por defecto (20..20) ver apdo. 2.70 Name
card_Issue_Date: TTime_Real; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
card_Validity_Begin: TTime_Real; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
card_Expiry_Date: TTime_Real;
Si hubiese un byte de desplazamiento erróneo (porque estuviese leyendo mal del archivo), ese fallo se propagaría, y faltaría o sobraría una letra a ese Card_Number, y lo mismo con el card_Issuing_Authority_Name. Pero no, los datos son correctos, aparece la "DGT DE MURCIA" y el nombre y apellidos del conductor perfectamente, sin falta ni sobra de letras. Llegados a este punto, diría que falla la función Devolver_Fecha, es decir, la traducción que hace de ese número no es la correcta. Lo más fácil es decir que el pdf tiene un error, o que incluso se ha modificado posteriormente las normas, y que ese pdf no lo contempla. Yo aconsejo dejar eso de lado y tirar hacia delante, posiblemente al final se encuentre como resolver el inconveniente. Socger, ¡¡ ánimo !! Por curiosidad, conté los días entre 01/01/1970 y la fecha de hoy, me daba 13.677,72. La primera fecha da sobre unos Cita:
Queda claro que la segunda y tercera fecha, está en base a esa fecha que desconocemos. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 13-06-2007 a las 18:21:06. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Huellas Digitales | Viky | Varios | 6 | 17-01-2007 18:38:18 |
| Atacar el ToolBarWindows32 | mangi | API de Windows | 0 | 28-04-2006 13:07:58 |
| Atacar cartografías tipo Map Point o NafTec | socger | Varios | 3 | 23-12-2005 10:04:09 |
| ¿Con .Net que bases de datos puedo atacar y como??? | burasu | .NET | 4 | 17-09-2005 12:16:05 |
| Atacar tablas Paradox con ADO. | Chojj | Conexión con bases de datos | 2 | 02-07-2003 20:50:12 |
|