elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Leer archivo grande y manipularlo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leer archivo grande y manipularlo  (Leído 1,874 veces)
chucky2183

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Leer archivo grande y manipularlo
« en: 18 Diciembre 2015, 18:39 pm »

Hola. Tengo un archivo de texto grande de 100mb. El archivo posee 1600000 lineas, en cada linea hay un proveedor con sus porcentajes de impuestos. Necesito manipular 1600 proveedores que tengo en la DB y actualizar sus impuestos. Es decir los 1600 proveedores de la DB los tiene que comparar 1 a 1 con cada linea del archivo.

Intento solo leer el archivo e imprimirlos y se me muere el programa. Llega a procesar unos 7 minutos y medio y tira un error 500. Pero en el log de apache no aparece el error.

Hay alguna forma de leer el archivo por partes? Ya le subi los tiempos en los archivos de configuracion pero aun asi el programa muere.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Leer archivo grande y manipularlo
« Respuesta #1 en: 18 Diciembre 2015, 18:45 pm »

usas fopen y con fread no lees todo sino solo una sección de X bytes por vez... así no sobrecargas el proceso


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
_Zume

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Leer archivo grande y manipularlo
« Respuesta #2 en: 19 Diciembre 2015, 08:11 am »

Yo que tú paso todos los datos a una tabla y comienzo a compararlos desde MySQL, así tienes más libertad para tratarlos además y podrías utilizar el sscanf para filtrar los datos.

Aunque para serte sincero no entendí bien, tienes 1600000 lineas, y necesitas manipular solo 1600 ?

_____________


Por cierto, yo hace meses quería sacar un montón de imágenes de una web (casi 10.000, y estaban ordenadas por números 1.jpg, 2.jpg, etc ..) y hice un código para copiar todas las  imágenes a un directorio pero tuve problema de sobre-carga, así que lo que hice fue pasarlo a un img lleno de todas las URL que habían con un bucle, y también tuve el problema, así que añadí un sleep(0.25); y lo logró, no sé si funcione.
« Última modificación: 19 Diciembre 2015, 08:15 am por _Zume » En línea

chucky2183

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Leer archivo grande y manipularlo
« Respuesta #3 en: 21 Diciembre 2015, 13:26 pm »

Yo que tú paso todos los datos a una tabla y comienzo a compararlos desde MySQL, así tienes más libertad para tratarlos además y podrías utilizar el sscanf para filtrar los datos.

Seria lo ideal. Pero al leer el archivo se muere. Si intento insertar 1600000 tuplas en la DB, va a ser peor.

Aunque para serte sincero no entendí bien, tienes 1600000 lineas, y necesitas manipular solo 1600 ?

El funcionamiento es asi. Tengo 1600 proveedores cargados en la base de datos, y cada mes bajo un archivo de retenciones de la AFIP (Administracion Federal de Ingresos Publicos). El archivo que bajo pesa unos 100Mb y posee aproximadamente 1600000 lineas. En cada linea hay un proveedor (CUIT, % de RETENCION, y otros datos mas).



Tengo que actualizar el % de retencion en los 1600 proveedores que tengo en la base de datos. Cada 1 de los 1600 proveedores los tengo que comparar con el archivo.
_____________


Por cierto, yo hace meses quería sacar un montón de imágenes de una web (casi 10.000, y estaban ordenadas por números 1.jpg, 2.jpg, etc ..) y hice un código para copiar todas las  imágenes a un directorio pero tuve problema de sobre-carga, así que lo que hice fue pasarlo a un img lleno de todas las URL que habían con un bucle, y también tuve el problema, así que añadí un sleep(0.25); y lo logró, no sé si funcione.
« Última modificación: 21 Diciembre 2015, 13:32 pm por chucky2183 » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Leer archivo grande y manipularlo
« Respuesta #4 en: 21 Diciembre 2015, 14:28 pm »

Usa fgets o la clase SplFileObject (POO). Así cargaras el archivo linea por linea sin cargarlo totalmente en memoria. Por otra parte imprimir las lineas no es precisamente un trabajo fácil y consume memoria. Asegúrate de hacerlo de la forma mas optimizada posible.

Código
  1. $file = new SplFileObject('archivo.txt');
  2.  
  3. while(!$file->eof()){
  4.    $linea = $file->fgets();
  5. }
  6.  
  7. $file = null;

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No me graba porque dice que el archivo es más grande de lo que es
Software
apatxe 2 1,965 Último mensaje 16 Marzo 2004, 21:50 pm
por Songoku
Leer código de un proyecto grande.
Programación General
16BITBoy 1 2,041 Último mensaje 29 Octubre 2010, 21:40 pm
por Debci
Subir un archivo GRANDE mediante POST por URL.
Java
Proteus1989 0 1,973 Último mensaje 6 Junio 2012, 17:35 pm
por Proteus1989
Leer archivo grande en linux
Scripting
ceibe 3 2,694 Último mensaje 20 Septiembre 2016, 23:04 pm
por MCKSys Argentina
Leer un numero muy grande
Programación C/C++
mendez1415 1 1,841 Último mensaje 26 Noviembre 2016, 18:07 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines