Foros del Web » Programando para Internet » PHP »

Dividir un csv para importacion a DB

Estas en el tema de Dividir un csv para importacion a DB en el foro de PHP en Foros del Web. Hola a todos, tengo una web en la que puedo subir un archivo csv con usuarios para impotar a una tabla de la BBDD. De ...
  #1 (permalink)  
Antiguo 09/04/2013, 03:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 16 años, 3 meses
Puntos: 3
Dividir un csv para importacion a DB

Hola a todos, tengo una web en la que puedo subir un archivo csv con usuarios para impotar a una tabla de la BBDD.

De momento tengo hecho que el código php importa el fichero fila a fila, pero me gustaría saber si existen algunas funciones para poder dividir el fichero en dos por ejemplo, y hacer la importación en paralelo de las dos partes, o primero una y después otra, ya que cuando el fichero es demasiado grande al trabajarlo en un bucle se hace un stackoverflow.

Gracias
  #2 (permalink)  
Antiguo 09/04/2013, 05:06
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Dividir un csv para importacion a DB

Si en paralelo te refieres a asíncronamente, se puede pero yo no te puedo dar mucha info al respecto, aunque hay documentacion por ahí, php asincrono, cronjob, etc.
  #3 (permalink)  
Antiguo 09/04/2013, 06:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: Dividir un csv para importacion a DB

Lo de paralelo si es mas bien asincrono, aunque según el fallo de mi sistema sería mas bien hacerlo de forma secuencial, pero en dos partes, por ejemplo un csv con 100 clientes, dividir en dos, hacer primero 50 registros y despues otros 50
  #4 (permalink)  
Antiguo 09/04/2013, 07:44
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 20 años, 3 meses
Puntos: 56
Respuesta: Dividir un csv para importacion a DB

Holas, zalito12.

Lo que dice AdRii es lo mejor, podrías crear un CSV para cada lote: abres el CSV original, lo vas leyendo y cada cierta cantidad de filas, escribes un archivo CSV nuevo, al tiempo que puedes ir sobreescribiendo el archivo original, restando lo ya salvado en los mini-archivos (algo como un vaciado de un vaso a otros).

Luego, haces que tu script que inserta en base de datos, lea el primer mini CSV, lo procese, y cuando termine, le indicas con cuál debe seguir, recargas el script, y partes dónde quedaste; y así, hasta que se terminen los mini CSV. Una vez ocurra esto, eliminas todos los mini CSV de tu servidor.

Es una idea. Saludos.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #5 (permalink)  
Antiguo 09/04/2013, 15:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: Dividir un csv para importacion a DB

Si exactamente!! Eso era la lógica que estaba buscando! Muchas gracias quinqui!! Voy a probar a ver si da resultados, y vuelvo a postear.
  #6 (permalink)  
Antiguo 09/04/2013, 21:29
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 15 años, 4 meses
Puntos: 27
Respuesta: Dividir un csv para importacion a DB

podes usar http://php.net/manual/es/function.exec.php
Ejecuta un comando linux que se llama split por ejemplo
split -l 500 prueba.txt nuevo
http://rm-rf.es/como-dividir-archivo...nix-con-split/

despues recorres los archivos generados preguntado si existe el archivo si no existe terminas el bucle.
O creas los archivos en un directorio aparte y usas alguna de las funciones de archivos de php para ejecutar tu script con todos los archivos generados.

Suerte y espero que te sirva

Etiquetas: csv, dividir, importacion, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:18.