<div>Buenas tardes,</div>
<div> </div>
<div>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.</div>
<div> </div>
<div>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.</div>
<div> </div>
<div>Para hacer el vaciado leo los 240 bytes en una variable char </div>
<div>con un for con incremento de 4 hago lo siguiente:</div>
<div> </div>
<div>
<div>char palabra[240];<br>char entero2a[2], entero2b[2], entero4a[4];</div>
<div>for (n=0;n<=_ntr-1;n++)<br>{<br>   fseeko64 (f1, 3600+((n)*_trl), SEEK_SET);<br>   fread (&palabra, sizeof(palabra), 1, f1);<br>   for (i=0;i<=239;i++4)<br>   {<br>      entero2a[0] = palabra[i];<br>      entero2a[1] = palabra[i+1];<br>
      entero2b[0] = palabra[i+2];<br>      entero2b[1] = palabra[i+3];<br>      entero4a[0] = palabra[i];<br>      entero4a[1] = palabra[i+1];<br>      entero4a[2] = palabra[i+2];<br>      entero4a[3] = palabra[i+3];<br>      printf ("%6d% %6d %11d\n", entero2(entero2a), entero2(entero2b), entero4(entero4a));<br>
   }<br>}<br> <br>Estas 2 funciones las uso para convertir en entero de 2 y 4 para convertirlos.  <br>int entero2(unsigned char* s) <br>{<br> int ret;<br> ret = s[0] * 256;<br> ret = ret + s[1];<br> if (ret>32767) ret = ret - 65536;<br>
 return ret;<br>}<br>long int entero4(unsigned char* s) <br>{<br> long int ret;<br> ret = s[0] * 16777216;<br> ret = ret + s[1] * 65536;<br> ret = ret + s[2] * 256;<br> ret = ret + s[3];<br> if (ret>2147483647) ret = ret - 2147483646;<br>
 return ret; <br>}</div></div>
<div> </div>
<div>Siento lo que me está demorando es el for.</div>
<div> </div>
<div> </div>
<div>Saludos desde Villahermosa, Tabasco, Mexico, America.</div>
<div>José Luis</div>
<div> </div>