Foros del Web » Programando para Internet » PHP »

Importar datos a tabla sin duplicar y quitar espacios vacíos

Estas en el tema de Importar datos a tabla sin duplicar y quitar espacios vacíos en el foro de PHP en Foros del Web. Hola a todos! Consulta... tengo un archivo csv y quisiera importarlo a una tabla. El tema es que hay una columna que se llama cod_linea ...
  #1 (permalink)  
Antiguo 13/09/2011, 07:19
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Importar datos a tabla sin duplicar y quitar espacios vacíos

Hola a todos! Consulta... tengo un archivo csv y quisiera importarlo a una tabla. El tema es que hay una columna que se llama cod_linea la cual contiene datos duplicados pero además, no sé por qué tiene espacios vacíos y no sé como quitárselos:
cod_linea
Ford________
Ford________
Ford________
Peugeot________
Peugeot________
Audi________
Audi________
Audi________

(las rayas ________ son espacios vacíos que aparecen en la celda del excel)

...y lo que quisiera hacer es que al importar NO me los duplique:
cod_linea
Ford
Peugeot
Audi

Actualmente importo todo el archivo csv con ete código:
Código PHP:
include('conectar.php');

$row 1;
$fp fopen ('lista.csv','r');
while (
$data fgetcsv ($fp1000";"))
{
$num count ($data);
print 
" <br>";
$row++;
echo 
"$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7];
$insertar="INSERT INTO producto (id_articulo,cod_categoria,categoria,cod_linea,linea,descripcion,precio,unidad) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]')";
mysql_query($insertar);
}
fclose ($fp); 
¿Cómo tengo que hacer para importar los datos sin duplicados? ¿Se pueden quotar los espacios vacíos?

Desde ya muchas gracias.
Saludos. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 13/09/2011, 07:32
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

y por que no haces esto:
if(!empty($data[x]) || $data[x]!='')
ok;
  #3 (permalink)  
Antiguo 13/09/2011, 07:37
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Patriarka... perdon, pero esto para que es?

Gracias.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 13/09/2011, 07:53
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Bueno voy a tratar de responderte, por que aunque se algo sobre PHP, espero que mi lógica pueda ser compatible con tu código. ... xD. Te lo describiré por pasos:

1. creas una variable array, para guardar un identificador de los datos que no quieres que se dupliquen.

2. Una vez extraes el dato del archivo CSV, utilizas la función str_replace, para quitar los espacios en blanco de cada dato en el array $data

3. Una vez sin espacios blancos, comparas el dato identificador del registro actual que tienes en $data, con los datos guardados en el primer array

4. Si el dato no existe, lo guardas en el array y procedes a imprimirlo con el echo y a guardarlo en la base de datos. Es seguro que imprimes la línea con el echo solo por depuración, pero te recomiendo utilizar un debugger para esto, si no es así, no importa, de todos modos con el echo, sabes que datos se estan guardando.

El código sería algo como el siguiente, si algo no te funciona, solo me avisas, ya que lo estoy haciendo sin interprete de php, mirando solo el manual en línea y con base en tu código:

Código PHP:
Ver original
  1. <?php
  2. /* Cuando el archivo contiene solo script de php, se recomienda utilizar solo la
  3. etiqueta de apertura completa */
  4.  
  5. include('conectar.php');
  6.  
  7. $row = 1;
  8.  
  9. /* Declaramos e inicializamos el array para guardar los ids.
  10. Práctica totalmente recomendada para evitar que se filtren datos basura
  11. Uno nunca sabe */
  12. $ids = array();
  13.  
  14.  
  15. $fp = fopen ('lista.csv','r');
  16. while ($data = fgetcsv ($fp, 1000, ";"))
  17. {
  18.     /* Supongo que la variable $num la sacaste del ejemplo, por que no veo que la uses acá
  19.     si no la necesitas para algo, puedes eliminarla */
  20.     $num = count ($data);
  21.    
  22.     echo "$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7];
  23.     print " <br>";
  24.     $row++;
  25.    
  26.     // Ahora revisamos todos los campos de $data y les quitamos los espacios en blanco
  27.     foreach ($data as $pos=>$dato) {
  28.         $data[$pos] = str_replace(" ","",$dato);
  29.     }
  30.  
  31.     /*Una vez removidos todos los espacios en blanco, pasamos a buscar si el dato
  32.     identificador ya existe en el array $ids, si ya existe, no lo procesamos, suponiendo que
  33.     el dato identificador es $data[0] */
  34.  
  35.     // Como esta función devuelve true, si el valor existe en el array, necesitamos que el
  36.     // valor retornado sea igual a false, por que esto significa que el dato no existe y podemos
  37.     // guardarlo en la base de datos, por eso pongo el ! antes de la función
  38.     if (!in_array($data[0],$ids)) {
  39.     // !in_array($data[0],$ids) es lo mismo que in_array($data[0],$ids) == false
  40.        
  41.         // Guardamos el dato identificador en el array y procedemos con el resto
  42.        $ids[] = $data[0];
  43.         $insertar="INSERT INTO producto (id_articulo,cod_categoria,categoria,cod_linea,linea,descripcion,precio,unidad) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]')";
  44.         mysql_query($insertar);
  45.     }
  46. }
  47. fclose ($fp);
  48.  
  49. //no utilizamos la etiqueta de cierre '?>' si el archivo solo contiene script php

Listo, así es como yo lo haría, intenta probarlo y cualquier cosa que no entiendas avisas. Aquí están los links de las funciones

http://php.net/manual/es/function.str-replace.php
http://co.php.net/manual/es/function.in-array.php

Exitos
  #5 (permalink)  
Antiguo 13/09/2011, 07:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Ojo que ese str_replace te va a quitar todos los espacios en blanco, si solo quieres quitar los del inicio o final es mejor usar trim().

Saludos.
  #6 (permalink)  
Antiguo 13/09/2011, 08:14
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Cita:
Iniciado por marx-pola Ver Mensaje
Patriarka... perdon, pero esto para que es?

Gracias.
para validar que el valor no este vacio.
estas muy verde amigo! esto es super-mega-basico.
  #7 (permalink)  
Antiguo 13/09/2011, 08:46
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Cita:
Iniciado por Patriarka Ver Mensaje
para validar que el valor no este vacio.
estas muy verde amigo! esto es super-mega-basico.
Así es... "estoy muy verde amigo!", dispongo de muy poco tiempo hasta para lo más básico y es por eso que hasta lo más insignificante lo pregunto aquí en este foro que siempre me ha ayudado y enseñado lo poco que sé.
Dicho esto, gracias por tu respuesta.

Pasando a lo más importante...

Raziel_Ravenheart, terrible explicación amigo. En cuanto llegue a casa lo pruebo. MUCHISIMAS GRACIAS!!!!!!!!!

GatorV: es justamente lo que me está pasando, quitar los espacios inicio y final. Gracias, como siempre!!!!
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.

Etiquetas: duplicar, espacios, mysql, quitar, tabla
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 22:06.