Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 22-05-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
Llevo este ejemplo realizado

He realizado de momento este código. (lector tacografos.zip)

Os agradecería que le hecharais un vistazo pues tengo dudas. He implementado en el código partes del BOE para aclarar los campos, el BOE es por ejemplo el que se encuentra en uno de los links de seoane

DUDAS:
Por ejemplo, no se que tipo de variables son las que me he topado en el BOE como por ejemplo OCTET STRING, en concreto me he topado con OCTET STRING (SIZE(5)) que lhe usado un ShortString pero no se si está bien (Ver. Card_Approval_Number)

Tampoco se que tipo de variable son IA5String(size(8)) así que también he usado un ShortString, pero creo que también está mal

Otros OCTET STRING como los he asignado a byte y a word dependiendo de que su parte SIZE tuviera 1 o 2. Y he capturado bien los datos. En el ejemplo proyecto podeis verlo con el fichero TGD que pasé en una consulta anterior de este hilo.

Pero en concreto con los campos Card_Approval_Number y Embedder_Ic_Assembler_Id no me displaya bien los datos (en blanco)

Os agradecería que le hecharais un vistazo al código y me pudieseis decir en que fallo y si veis algún fallo en la programación o mejora también os lo agradecería.

Gracias a todos por la ayuda.

PD. En el fichero 'ficheros TGD.zip' os paso más ficheros TGD para que podais hacer pruebas.
Archivos Adjuntos
Tipo de Archivo: zip Lector tacógrafos.zip (10,9 KB, 153 visitas)
Tipo de Archivo: zip ficheros TGD.zip (15,5 KB, 135 visitas)

Última edición por socger fecha: 22-05-2007 a las 13:04:51.
Responder Con Cita
  #22  
Antiguo 22-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Un Octeto no es mas que un Byte o un Char, es decir 8 bits. Son solo maneras diferentes de llamar a lo mismo

Prueba usando esto:
Código Delphi [-]
  Card_Approval_Number: array[1..8] of Char;  
  Embedder_Ic_Assembler_Id:  array[1..5] of Char;

He echo algunas pruebas, y el Embedder_Ic_Assembler_Id ya se muestra bien, en cambio Card_Approval_Number sigue mostrándose en blanco, pero eso es normal porque esta formado por 8 espacios en blanco , supongo que en los ficheros que tienes de muestra no se utiliza ese campo.
Responder Con Cita
  #23  
Antiguo 22-05-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo tampoco recordaba qué era un octeto , me has refrescado la memoria... es que los años no perdonan

Responder Con Cita
  #24  
Antiguo 23-05-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
Gracias

Gracias por la rápida respuesta de los dos.

Prosigo con el trabajo. Os pasaré el código conforme lo vaya realizando. Espero que os sirva de algo a este foro

Saludos
Responder Con Cita
  #25  
Antiguo 31-05-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
Chicos tengo otro fallo

Os paso dos ficheros para probarme este error de interpretación (Lector tacógrafos.rar y Fichero_Tarjeta_Digital_Conductor.rar)

Bien me ocurre este problema, existe un tipo de datos según el BOE que conseguí gracias a vosotros que son del tipo time real de hecho esto es lo que dice el BOE:
--------------------------------------------------------------------------------------------------
2.110. TimeReal
Código para un campo combinado de fecha y hora, donde ambos parámetros se expresan como los segundos transcurridos desde las 00h.00m.00s. del 1 de enero de 1970, tiempo medio de Greenwich.

TimeReal{INTEGER:TimeRealRange} ::= INTEGER(0..TimeRealRange)

Asignación de valor . Alineación de octeto: número de segundos transcurridos a partir de la medianoche del día 1 de enero de 1970, tiempo medio de Greenwich.

La fecha/hora máxima posible es en el año 2106.

Definición de valores variables empleados en las definiciones del apartado 2.
TimeRealRange ::= 232-1
--------------------------------------------------------------------------------------------------

Para calcular la fecha que devuelve una variable del tipo he creado primero la clase tTime_Real:
--------------------------------------------------------------------------------------------------
TTime_Real = packed record // 4 byte ver apdo. 2.110. TimeReal
Time_Real: Integer; // [INTEGER:TimeRealRange] ::= INTEGER(0..TimeRealRange) ... TimeRealRange ::= 2^32-1
end;
--------------------------------------------------------------------------------------------------

Y segundo la función Devolver_Fecha:
--------------------------------------------------------------------------------------------------
function TForm1.Devolver_Fecha(Fecha_Integer: Integer): String;
var Cantidad_Dias_Transcurridos: Extended;
Cantidad_Resto_Horas: Extended;
Cantidad_Resto_Minutos: Extended;
Cantidad_Resto_Segundos: Extended;
Resto_Que_Queda_de_Segundos: Extended;
Dia_A_Devolver: tDate;
Mensaje: String;
begin
// Un día = 60 segundos * 60 minutos * 24 horas = 86400 segundos
// Una hora = 60 segundos * 60 minutos = 3600 segundos
// Una minuto = 60 segundos = 60 segundos

Resto_Que_Queda_de_Segundos := Fecha_Integer;
Mensaje := 'Total segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Dias_Transcurridos := Abs(Int(Resto_Que_Queda_de_Segundos / 86400));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Dias_Transcurridos * 86400);
Mensaje := Trim(Mensaje) + 'Total días transcurridos: ' + FloatToStr(Cantidad_Dias_Transcurridos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Horas := Abs(Int(Resto_Que_Queda_de_Segundos / 3600));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Resto_Horas * 3600);
Mensaje := Trim(Mensaje) + 'Resto de horas transcurridas: ' + FloatToStr(Cantidad_Resto_Horas) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Minutos := Abs(Int(Resto_Que_Queda_de_Segundos / 60));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Resto_Minutos * 60);
Mensaje := Trim(Mensaje) + 'Resto de minutos transcurridas: ' + FloatToStr(Cantidad_Resto_Minutos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Segundos := Resto_Que_Queda_de_Segundos;
Mensaje := Trim(Mensaje) + 'Resto de segundos transcurridas: ' + FloatToStr(Cantidad_Resto_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Dia_A_Devolver := StrToDate('01/01/1970') + Cantidad_Dias_Transcurridos;
Mensaje := Trim(Mensaje) + 'Dia a devolver: ' + DateToStr(Dia_A_Devolver) + chr(10) + chr(13);

MessageDlg( Mensaje, mtInformation, [mbOk], 0 );

Result := Trim( DateToStr(Dia_A_Devolver) + ' ' +
Trim(FloatToStr(Cantidad_Resto_Horas)) + ':' +
Trim(FloatToStr(Cantidad_Resto_Minutos)) + ':' +
Trim(FloatToStr(Cantidad_Resto_Segundos)) );
end;
--------------------------------------------------------------------------------------------------

El ejemplo que os paso me debería de haber devuelto sobre el tipo de
FID = 0520 ... EF Identification (CardIdentification + DriverCardHolderIdentification)
En Fecha primer día de validez de la tarjeta: 09-09-2006
y en Fecha en la que termina la validez de la tarjeta: 09-09-2011

Estos datos los cargo en la clase TCard_Identification sobre card_Validity_Begin y card_Expiry_Date respectívamente
--------------------------------------------------------------------------------------------------
TCard_Identification = packed record // 65 byte ... ver apdo. BOE 2.20. CardIdentification
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; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
end;
--------------------------------------------------------------------------------------------------

Pero como comprobareis con el ejemplo no me devuelve bien los valores de fecha, creo que puede ser o que no he entendido bien que tipo de datos son los TimeReal o que se me escapa algo en la función.

Por si os hacen falta os envío en el fichero Otros_Ficheros_Conductores.rar más capturas de conductores.

Os agradecería me guiaseis ante esta duda. Como veréis en el código que subo voy bastante avanzado gracias a vuestra ayuda.

De antemano, os doy las gracias por vuestra colaboración.
Archivos Adjuntos
Tipo de Archivo: zip Fichero_Tarjeta_Digital_Conductor.zip (2,7 KB, 89 visitas)
Tipo de Archivo: zip Lector tacógrafos_1.zip (16,2 KB, 119 visitas)
Tipo de Archivo: zip Lector tacógrafos_2.zip (16,1 KB, 134 visitas)
Tipo de Archivo: zip Otros_Ficheros_Conductores.zip (7,6 KB, 79 visitas)
Responder Con Cita
  #26  
Antiguo 31-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Un paréntesis.

El programa ¿es para tí? ¿lo vas a vender? ¿lo haces por curiosidad?

Lo digo porque leer los archivos (que es lo que haces ahora) es lo de menos, después tienes que:
- organizar los datos (de cada conductor en una carpeta separada).
- interpretar los datos cuando es tarjeta de Empresa.
- Sacar las estadísticas, que es en realidad lo interesante del tema (saber cuando un conductor se pasó del límite de velocidad o bien cuando sobrepasó el límite de tiempo al volante), el día, la hora, el periodo de incidencia, etc.
-Cruzar los datos de la tarjeta empresa con los datos de conductores, esto si puede ser más que tedioso y propenso a errores.
- Revisar todas las modificaciones del BOE al efecto, para actualizar tu programa y que cumpla las nuevas reformas.
- Revisar todos los nuevos fabricantes de VU que vayan saliendo, (para que tu programa lo reconozca). Yo no he encontrado una lista de fabricantes por ningún sitio.
- Sobre todo, realizar gráficas de líneas basadas en todos los datos anteriores, porque realmente es lo que va a mirar el empresario. De nada me sirve ver un grid con los datos de 3 meses anteriores, de nueve camiones y 12 conductores y aparte los datos de Empresa.

Es muy típico que un conductor introduzca la tarjeta en el coche por la mañana y la saque por la noche, sin establecer los modos de pausa, aparcamiento, conducción al entrar en barcos, etc. Todos esos trucos debes conocerlos y actuar como diga la ley, por ejemplo, alertar cuando el tiempo de conducción no supere los 2 minutos... (caso típico de mover el camión en el lugar de carga) para que el empresario tome cuenta y le eche la bulla al conductor.

Lo que digo, es que por 1.000 € tienes el DATACOGRAF Professional que realiza todo el trabajo. Dudo que una persona sola, pueda realizar el mismo software por el mismo coste.

Existen programas más baratos, pero, por ejemplo, no cruzan los datos de Empresa - conductores.

No quiero desalentarte, solo quiero que veas donde te metes y valores otras opciones antes de continuar.

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: 31-05-2007 a las 15:32:03.
Responder Con Cita
  #27  
Antiguo 31-05-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
lepe ... Es para mi jefe

Pertenezco a una empresa que se dedica al servicio de viajes discrecionales (viajes por bus).

Estoy desarrollando esta aplicación para integrarla en nuestro ERP, no con vistas a su comercialización posterior.

La mayoría del software que hay en EL MERCADO no da integración de sus datos con un ERP ajeno a no ser por importación/exportación de datos por lo que no es trasparente para el usuario de la empresa para la que trabajo.

Por eso en este hilo comenté de ir subiendo el código progresívamente para que otros pudieran aprovecharse de él.

De momento me he topado con este último problema (2 comentarios anteriores), por eso pido ayuda. Héchale un vistazo por favor y a ver que me puedes decir.

Gracias, de antemano.
Responder Con Cita
  #28  
Antiguo 31-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Se lo he echado, pero no me queda nada claro, por eso no comento nada desde hace mucho .

Dice que TimeReal va de cero a 2^32-1 ... vale, eso cabe en un tipo de datos Integer.

Después Fecha_integer da resultados negativos ¿no quedamos en que era un valor positivo? .... ¿está en complemento a 2 ese número? ¿no está leyendo bien los datos?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #29  
Antiguo 05-06-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
perdona lepe lo vi tarde

En cuanto a tu cita:
----
Después Fecha_integer da resultados negativos ¿no quedamos en que era un valor positivo? .... ¿está en complemento a 2 ese número? ¿no está leyendo bien los datos?
---

Si está recogiendo bien los datos pero no se a que te refieres (¿está en complemento a 2 ese número?)

Gracias, por vuestra ayuda. Pero sigo pillado en este asunto antes puesto.
Responder Con Cita
  #30  
Antiguo 06-06-2007
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 22
sitrico Va por buen camino
Me voy a meter a consciencia de que no tengo ni idea de esto

Pero...

Cita:
Time_Real: Integer; // [INTEGER:TimeRealRange] ::= INTEGER(0..TimeRealRange) ... TimeRealRange ::= 2^32-1
end;
dice que el INTEGER va de 0..2^32-1

Me pasó algo parecido en otro caso y la solucion tenía que ver con:

Cita:
Generic integer types for 32-bit implementations of Delphi
Type Range Format
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.

Fundamental integer types
Type Range Format
Shortint -128..127 signed 8-bit
Smallint -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit
Int64 -2^63..2^63-1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
El tipo integer va de -2147483648..2147483647 mientras que el Cardinal 0..4294967295 (sin signo) por lo que creo que debes definir tu variable como cardinal (ó longword) en lugar de integer.

Espero te sirva.
__________________
Sitrico
Responder Con Cita
  #31  
Antiguo 07-06-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
Gracias sitrico

Gracias, pero cambiando en el programa el tipo de variable a cardinal o longword me sigue ocurriendo lo mismo

Saludos
Responder Con Cita
  #32  
Antiguo 11-06-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
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
Responder Con Cita
  #33  
Antiguo 11-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #34  
Antiguo 12-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
  #35  
Antiguo 12-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues con esas modificaciones tampoco va

Cita:
Empezado por socger
En Fecha primer día de validez de la tarjeta: 09-09-2006
y en Fecha en la que termina la validez de la tarjeta: 09-09-2011
Pues no da, jejeje, me da fechas entorno al 1970 y el año 2038
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
O sea:
- 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.
Responder Con Cita
  #36  
Antiguo 13-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.

Última edición por Casimiro Notevi fecha: 13-06-2007 a las 00:54:42.
Responder Con Cita
  #37  
Antiguo 13-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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 el Card_Number es el correcto (porque no hay duda, se ve en el Memo1 y también en el GroupBox.Caption), entonces el resto de datos deben ser correctos.

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:
- La tarjeta se expidió hace 24.895,27 días (esto daba el año 2038)
- Fecha primer día de validez: 172 días
- Fecha termina la validez: 41 dias
Queda claro que la primera fecha no es desde 1970, tampoco desde 1900.
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.
Responder Con Cita
  #38  
Antiguo 13-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, puede ser que la documentación tenga una errata en la fecha o que la hayan cambiado.
Sería conveniente localizar el organismo encargado de emitir esas normas y conseguir la última que tengan actualizada.
Responder Con Cita
  #39  
Antiguo 14-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por lo visto el dato está bien, he encontrado información en sitios oficiales y parece correcto.
Entonces, me pregunto, ¿puede ser que lo que esté mal sea el fichero que se está importando?, ¿de dónde han salido esos ficheritos de pruebas?
Responder Con Cita
  #40  
Antiguo 15-06-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Poder: 20
socger Va por buen camino
Los ficheros son recogidos de tarjetas de conductores

Estos ficheros están recogidos de las tarjetas de algunos de los conductores de la empresa de transportes para la que trabajo.

Puedo subir más para que los probeis. Y de momento con todos los que he probado me ha ocurrido lo mismo.

Gracias de todos modos. Seguiré haciendo pruebas, pero os agradecería que me pudieseis hechar un cable. Cualquier idea por la que pueda caminar me podría solucionar este problema.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 00:52:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi