[C con Clase] Orientacion leer enteros
anonymous.mx
anonymous.mx en gmail.com
Sab Jul 3 00:18:00 CEST 2010
Buenas tardes,
Solicito su orientación para analizar unos archivos con valores enteros de 2
y 4 bytes, con registros de 240 bytes cada uno desde linux.
Son archivos de 450 GB mas o menos. tardo en leerlos unas 3 horas y me
gustaria una orientación para leerlo en menos tiempo.
Para hacer el vaciado leo los 240 bytes en una variable char
con un for con incremento de 4 hago lo siguiente:
char palabra[240];
char entero2a[2], entero2b[2], entero4a[4];
for (n=0;n<=_ntr-1;n++)
{
fseeko64 (f1, 3600+((n)*_trl), SEEK_SET);
fread (&palabra, sizeof(palabra), 1, f1);
for (i=0;i<=239;i++4)
{
entero2a[0] = palabra[i];
entero2a[1] = palabra[i+1];
entero2b[0] = palabra[i+2];
entero2b[1] = palabra[i+3];
entero4a[0] = palabra[i];
entero4a[1] = palabra[i+1];
entero4a[2] = palabra[i+2];
entero4a[3] = palabra[i+3];
printf ("%6d% %6d %11d\n", entero2(entero2a), entero2(entero2b),
entero4(entero4a));
}
}
Estas 2 funciones las uso para convertir en entero de 2 y 4 para
convertirlos.
int entero2(unsigned char* s)
{
int ret;
ret = s[0] * 256;
ret = ret + s[1];
if (ret>32767) ret = ret - 65536;
return ret;
}
long int entero4(unsigned char* s)
{
long int ret;
ret = s[0] * 16777216;
ret = ret + s[1] * 65536;
ret = ret + s[2] * 256;
ret = ret + s[3];
if (ret>2147483647) ret = ret - 2147483646;
return ret;
}
Siento lo que me está demorando es el for.
Saludos desde Villahermosa, Tabasco, Mexico, America.
José Luis
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100702/5e2afa72/attachment.html>
Más información sobre la lista de distribución Cconclase