Para un cliente en concreto, he tenido que buscar como dividir un archivo de productos en csv enorme para importarlo a Prestashop.
Después de varios intentos usando fgetcsv, al final encontré este script que lo divide por tamaño del archivo:
<?php
/**
* Split a CSV file
*
* Each row is its own line.
* Each cell is comma-separated
* This file splits it into piece of size $size, add the header row
* and names the resulting file filename_X.csv where filename is the
* name of the original file and X is an incrementing integer.
*/
// Editable Options
$size = 300000; // about 300kb
$to_read = ‘Productos_G’;
// Do not edit
$done = false;
$part = 0;
if (($handle = fopen($to_read.».txt», «r»)) !== FALSE) {
$header = fgets($handle);
while ($done == false) {
$locA = ftell($handle); // gets the current location. START
fseek($handle, $size, SEEK_CUR); // jump the length of $size from current position
$tmp = fgets($handle); // read to the end of line. We want full lines
$locB = ftell($handle); // gets the current location. END
$span = ($locB – $locA);
fseek($handle, $locA, SEEK_SET); // jump to the START of this chunk
$chunk = fread($handle,$span); // read the chunk between START and END
file_put_contents($to_read.’_’.$part.’.csv’,$header.$chunk);
$part++;
if (strlen($chunk) < $size) $done = true;
}
fclose($handle);
}
?>
Es muy rápido y eficiente.
Esta es la web del desarrollador (David Cox) que lo ha hecho: http://www.dconstructing.com/2009/12/30/splitting-a-csv-file
http://www.dconstructing.com/2009/12/30/splitting-a-csv-file
Gracias por el post, lo he usado, y funciona bien pero algunos archivo salen dañados de 354 lineas solo pude obtener 170, no se si estoy haciendo algo mal, me pasa si lo divido en windows con algun programa no sale perfecto.
Estos «apaños» siempre te dan algún error y con una tienda no puedes tener errores ninguno, siempre hay algo que falla y como no te des cuenta ya las has liado, y lo digo por experiencia.
Yo actualizo todos los días el CSV y son mas de 2000, pero lo que hago es partirlo con Excel, es mas facil y seguro