0 Flares Filament.io 0 Flares ×

Dividir, trocear un csv

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

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Email -- Buffer 0 Pin It Share 0 Filament.io 0 Flares ×
2 Comentarios
  1. alex 4 años

    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.

  2. Manuel 4 años

    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

Contesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

©2019 Ismael Torres 

Inicia Sesión con tu Usuario y Contraseña

¿Olvidó sus datos?