Foros del Web » Programando para Internet » PHP »

Cómo desduplicar registros desde un .csv?

Estas en el tema de Cómo desduplicar registros desde un .csv? en el foro de PHP en Foros del Web. Hola, quiero desduplicar registros de un archivo csv usando php. Los registros estan de la forma: Código: id;email Como puedo hacer eso con php?, todavia ...
  #1 (permalink)  
Antiguo 13/01/2014, 13:44
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Cómo desduplicar registros desde un .csv?

Hola,

quiero desduplicar registros de un archivo csv usando php.

Los registros estan de la forma:
Código:
id;email

Como puedo hacer eso con php?, todavia no me sente a verlo y lo dejo planteado aca. Seguro tengo q recorrer con un while el csv, hacer un explode en el ";"...

Código PHP:
$mil fopen ("desduplicar.csv" "r" );
$quinientos fopen ("desduplicados.csv" "w" ); 
Alguna ayuda?

Gracias
  #2 (permalink)  
Antiguo 13/01/2014, 14:25
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Cómo desduplicar registros desde un .csv?

y es muy sencillo , armas un array con todos los registros,
luego haces array_unique para que limpie los repetidos y escribis nuevamente el csv con los resgistros desduplicados , jajaja que palabra te inventaste he!
  #3 (permalink)  
Antiguo 13/01/2014, 20:58
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Cómo desduplicar registros desde un .csv?

Cita:
Iniciado por Patriarka Ver Mensaje
y es muy sencillo , armas un array con todos los registros,
luego haces array_unique para que limpie los repetidos y escribis nuevamente el csv con los resgistros desduplicados , jajaja que palabra te inventaste he!
Yo tengo el archivo csv de la forma campo1;campo2 pero necesito desduplicar campo1 solamente, entonces hago un explode.

No se como hacer para comprobar si se repite ese campo y luego volver a unirlo para q vuelva a quedar de la forma campo1;campo2

Estaba por probar con algo asi pero me pierdo con las funciones de fopen y demas, no las use nunca
Código PHP:
$filename "archivo.csv";
$file fopen($filename"r");
$read fread($filefilesize($filename));

$split array_unique(explode(";"$read));

fclose($file);

$filename2 "archivo_nuevo.csv";

$file2 fopen($filename2"a");

foreach(
$split as $key=>$value) {
    if(
$value != "") {
        
fwrite($file2$value "\n");
    }
}

fclose($file2); 
...no se como recorrer el csv y decir: si existe campo1, no agrego nada, pero si no existe vuelvo a unir la linea campo1;campo2 y la escribo en otro archivo csv

campo1 y campo2 estan relacionados, si existe el campo1 lo elimino junto con su campo2 y viceversa

Resumiendo, quiero hacer esto:

leer y recorrer el csv
hacer un explode para separar los campos
verificar q campo1 no este repetido
escribir un nuevo archivo csv con los datos desduplicados

Alguna orientacion?
Gracias
  #4 (permalink)  
Antiguo 14/01/2014, 06:07
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Cómo desduplicar registros desde un .csv?

No logro hacer funcionar este script q fui haciendo.
Leo el archivo prueba.csv, lo explodeo y todo lo demas pero no logro q me elimine los registros duplicados.

tengo campo1;campo2 y le hago un explode y me queda campo1 separado, despues lo quiero comparar si existe o no para eliminarlo o copiarlo y al final volver a armar la linea campo1;campo2 en el csv de salida

Alguna ayuda?

Código PHP:

$fp 
fopen "prueba.csv" "r" );
$fp_write fopen "prueba_salida.csv" "w" );

$i=0;

while(!
feof($fp))
{
    
$linea fgets($fp);
    
$linea_explode explode(';'$linea);
//      $campo_a_desduplicar = $linea_explode[0];

    
if(in_array($linea_explode[0], $campo_a_desduplicar)){
        
$i++;
    }else{
        
$linea_explode[1] = trim($linea_explode[1], "\n");
        
$linea implode(';'$linea_explode);
        
fputs ($fp_write,$linea);
    }
    
}
//print_r($i);
fclose $fp ); 
fclose $fp_write ); 
  #5 (permalink)  
Antiguo 15/01/2014, 04:48
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
[Solucionado] Cómo desduplicar registros desde un .csv?

Solucionado.
Recorro el csv, hago un explode y comparo la parte de la cadena q me interesa. Si existe esa parte de la cadena, la pisa y si no la agrega junto la otra parte, de la forma campo1;campo2
Lo unico malo es q tarda bastante

Código PHP:

$fp 
fopen ("prueba.csv" "r" );
$fp_write fopen "salida.csv" "w" );
$i=0;
$todos = array();

while(!
feof($fp))
{
    
$linea fgets($fp);
    
$linea_explode explode(';'$linea);
    if(
in_array($linea_explode[0], $todos)){
        
$i++;
    }else{
        
$todos[] = $linea_explode[0];
        
fputs ($fp_write,$linea);
    }
    
}
//print_r($i);
fclose $fp ); 
fclose $fp_write ); 

Etiquetas: registro, registros
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 13:01.