[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