Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/11/2013, 09:44
urkitarke
 
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: A vueltas con un archivo binario

Hola de nuevo....

He realizado el script conforme las instrucciones pero... algo debo hacer mal pues me slaen datos incoherentes.


Cita:
#include <conio.h>
#include <stdio.h>
#include <string.h>

struct RECORD{
short int id;
double julian_time;
char internal_b;
short int amplitude;
short int bearing;
short int wave;
char polarity;
char stroke;
short int range;
};

int main() {

double julian_date;
short int id,amplitude,bearing,wave,range;
char internal_b,polarity,stroke;

FILE *arx;
if(!(arx = fopen("./prueba2.txt","rb"))) {
printf("No existe el archivo");
}
struct RECORD record;
memset(&record, 0, sizeof(struct RECORD));
fread(&record, sizeof(struct RECORD), 1, arx);

size_t file_size;
fseek(arx, 0L, SEEK_END);
file_size = ftell(arx);
fseek(arx, 0L, SEEK_SET);
int n_records = file_size / sizeof(struct RECORD);

printf("tenemos %i registros\n",n_records);

int i =1;

while(!feof(arx)){

printf("reg. num %d\n",i);
fread(&id,sizeof(short int),1,arx);
fread(&julian_date,sizeof(double),1,arx);
fread(&internal_b,sizeof(char),1,arx);
fread(&amplitude,sizeof(short int),1,arx);
fread(&bearing,sizeof(short int),1,arx);
fread(&wave,sizeof(short int),1,arx);
fread(&polarity,sizeof(char),1,arx);
fread(&stroke,sizeof(char),1,arx);
fread(&range,sizeof(short int),1,arx);

printf("Internal1: %d\nTime: %g\nInternal2: %c\nAmpli: %d\nBearin: %d\nWave: %d\nPolaridad: %c\nStroke: %c\nRange: %d\n==================\n",id,julian_date,internal_ b, amplitude, bearing, wave, polarity, stroke, range);

i++;

}
}
He cambiado el archivo de origen quitando los priemros dígitos y/o quitando espacios en blanco y/o quitando saltos de línea, quedándome el archivo del siguiente modo:

Cita:
0834e134b5e9bdda4142d6010e00006a000077803416410805 38dab642bd014101a780c00000800000000834d3b5b649bdda 41423401f0010069000012803415b1085935dab642bd014101 6d6b0800008000157e0834bff4b712bdda4142dc015a010023 0000008034007c08c659dab742bd0141008a6f860000800000 000834ff60b841bdda4142ae011000002200003980340c7008 9a10dab842bd01410253244000008000000008349861b8d7bd da41427f010600008100006680340ace088c57dab942bd0141 01126fae0000800000000834a47eb9cfbdda4142e7015e0000 3800001080340d4508e841dab942bd0141017b227e00008000 000008348f31ba03bdda4142f0012800007d000000803400db 082566daba42bd014100812256000080000000083403caba39 bdda4142ac01b000002200000080340071086978daba42bd01 4100d6384a000080000894083450f0ba6dbdda4142a001b200 00660000008034000e0879b9daba42bd0141008526a2000080 000000
y también así:

Cita:
0834e134b5e9bdda4142d6010e00006a000077803416410805 38dab642bd014101a780c0000080000000
0834d3b5b649bdda41423401f0010069000012803415b10859 35dab642bd0141016d6b0800008000157e
0834bff4b712bdda4142dc015a0100230000008034007c08c6 59dab742bd0141008a6f86000080000000
0834ff60b841bdda4142ae011000002200003980340c70089a 10dab842bd014102532440000080000000
08349861b8d7bdda41427f010600008100006680340ace088c 57dab942bd014101126fae000080000000
0834a47eb9cfbdda4142e7015e00003800001080340d4508e8 41dab942bd0141017b227e000080000000
08348f31ba03bdda4142f0012800007d000000803400db0825 66daba42bd014100812256000080000000
083403caba39bdda4142ac01b0000022000000803400710869 78daba42bd014100d6384a000080000894
083450f0ba6dbdda4142a001b20000660000008034000e0879 b9daba42bd0141008526a2000080000000
pero los datos que me devuelve el script son erróneos:

Cita:
tenemos 1204 registros


reg. num 1
Internal1: 14384
Time: 1.52046e-51
Internal2: e
Ampli: 25145
Bearin: 25700
Wave: 13409
Polaridad: 1
Stroke: 4
Range: 25650
==================
reg. num 2
Internal1: 12342
Time: 1.10764e-47
Internal2: a
Ampli: 12336
Bearin: 12336
Wave: 14135
Polaridad: 8
Stroke: 0
Range: 13363
==================
reg. num 3
Internal1: 13873
Time: 5.64466e-38
Internal2: d
Ampli: 25185
Bearin: 13366
Wave: 25138
Polaridad: d
Stroke: 0
Range: 13361
==================
reg. num 4
Internal1: 12337
Time: 1.41525e-76
Internal2: 0
Ampli: 12336
Bearin: 12344
Wave: 12336
Polaridad: 0
Stroke: 0
Range: 12336
==================

El campo "Time" debería ser el 28 de julio de 2013 que es cuando se tomaron los datos y ese dato que aparece, pasándolo a fecha gregoriana, no existe como tal.

Alguien podría decirme que estoy haciendo mal??
Podríais ayudarme??

Gracias.

PD: No he puesto todos los valores, sólo unos pocos de muestra.

Última edición por urkitarke; 18/11/2013 a las 09:55 Razón: Se guardó antes de tiempo :(