[C con Clase] Orientacion leer enteros
David Fire
ddfire en gmail.com
Sab Jul 3 02:01:20 CEST 2010
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)
{
printf ("%6d% %6d %11d\n", entero2(palabra[i]), entero2(palabra[i+2]),
entero4(palabra[i]));
}
}
igual lo que te demora son los 450GB no el for... yo buscaria una
optimizacion haciendo que se guarde en distintos archivos en distintos
discos y podes lanzar varios programas a la vez, lo mas lento aca es leer
del disco.
usar discos en raid 0 o 10 podria aumentarte la velocidad u otro tipo de
raid tambien.
El 2 de julio de 2010 19:18, anonymous.mx <anonymous.mx en gmail.com> escribió:
> 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
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
--
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100702/9564ecf2/attachment.html>
Más información sobre la lista de distribución Cconclase