Foros del Web » Programando para Internet » PHP »

PHP OO fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Estas en el tema de fgetcsv y fputcsv: Importando un CSV de una web a mi hosting. en el foro de PHP en Foros del Web. Hola de nuevo a todos!, Estoy trabajando en un PHP para que importa un CSV de un servidor externo a mi hosting. Estoy usando fgetcsv ...
  #1 (permalink)  
Antiguo 07/04/2013, 19:44
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Hola de nuevo a todos!,

Estoy trabajando en un PHP para que importa un CSV de un servidor externo a mi hosting. Estoy usando fgetcsv y fputcsv dentro de la función, pero claro, el csv original tiene productos de marcas que no me interesan y claro, querría que si encuentra que si un producto es de la marca que sea, que ignore ese producto por completo y pase al siguiente.

La parte del código:

Código PHP:
Ver original
  1. if (($handle2 = fopen(dirname(__FILE__).'/'.Classes::getFileName(), "w+")) != FALSE)
  2.             {
  3.                 $i=0;  
  4.                 while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
  5.                 {
  6.                     if ($i > 0) fputcsv($handle2, $data, ';', '"');
  7.                     $i++;
  8.                 }
  9.                 fclose($handle);
  10.                 fclose($handle2);
  11.             }

Os pongo un ejemplo gráfico. Veréis que hay una columna que son las marcas. Pues lo que quiero es que por ejemplo si la marca es Nike, al pasar el contenido ignore esos productos.



Espero que alguien me pueda ayudar u orientar, MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 08/04/2013, 03:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Manual

Cita:
Description

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] )
Similar to fgets() except that fgetcsv() parses the line it reads for fields in CSV format and returns an array containing the fields read.


(La versión en castellano esta mal traducida)

Luego data es un array y por el ejemplo que das marca es el campo 1 del array (despues del 0 cero)


Código PHP:
Ver original
  1. while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
  2.                 {
  3.                     if ($i > 0){
  4.                         if($data[1]!="Nike"){
  5.                            fputcsv($handle2, $data, ';', '"');
  6.                         }
  7.                     }
  8.                     $i++;
  9.                 }
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/04/2013, 15:26
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Hola,

lo primero es darte las gracias me ha ayudado mucho.

He probado con otro código más simple, un PHP suelto, en local y parece que funciona, pero no sé porque en la aplicación no termina de funcionar. O bien no funciona a secas o sólo pone los primeros. Depende de como intente adaptarlo al código.

EN fin, seguiré intentándolo ya que parece que van por ahí los tiros.

De nuevo un saludo y gracias!
  #4 (permalink)  
Antiguo 09/04/2013, 11:08
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Estoy mirando a ver y consigo que funcione, aunque al crear el nuevo CSV me deja campos medio vacíos y parece que desorganice las columnas.

Luego, además intento hacerlo con más de una marca, así que he probado a hacer una variable que es un array con las marcas y he probado varias formulas para hacer que funcione, intentando implementar un foreach($marcas as $valor), !in_array, array_search y usando otro array para almacenar entes en éste los datos ya "filtrados".
  #5 (permalink)  
Antiguo 09/04/2013, 11:25
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Osea, mi duda aquí es si $data es interpretado como un total de datos, sin distinción de columnas y filas.

Lo pregunto para saber como decir de verdad que si encuentra en la columna 1, algo igual a lo de un array, que se salte esa fila. Pero claro, si copia campo a campo, puede que antes de descartar ya haya copiado algunos datos de esa fila, como puede ser por ejemplo "zapatilla". Así sí entendería que entonces dejara tantos campos en blanco y se vaya desordenando poco a poco.
  #6 (permalink)  
Antiguo 10/04/2013, 04:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Cita:
$data es interpretado como un total de datos
$data es un array con los datos de una fila del csv original.

Código PHP:
Ver original
  1. $marcas=('nike','addidas');
  2.  
  3.    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
  4.                     {
  5.                         if ($i > 0){
  6.                             if(!in_array($data[1],$marcas)){
  7.                                fputcsv($handle2, $data, ';', '"');
  8.                             }
  9.                         }
  10.                         $i++;
  11.                     }

No van a estar ni nike ni addidas

in_array
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 24/04/2013, 14:32
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Gracias de nuevo!,

La pena es que por más que lo intento no funciona, me genera un archivo vacío con ese último intento. Entiendo lo que intenta, pero no debe ser la forma adecuada por alguna razón difícil de entender.

Un saludo!
  #8 (permalink)  
Antiguo 25/04/2013, 07:06
 
Fecha de Ingreso: abril-2013
Mensajes: 32
Antigüedad: 11 años
Puntos: 5
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

Si te esta generando un archivo vacio tal vez lo estes guardando mal. Hace un var_dump() del filtrado. Por otra parte, en el pasado tuve algun problema con la funcion para parsear el csv, por lo que lo hice a mano. Tal eso te sirva.

saludos
  #9 (permalink)  
Antiguo 26/04/2013, 10:41
 
Fecha de Ingreso: marzo-2013
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: fgetcsv y fputcsv: Importando un CSV de una web a mi hosting.

GRacias, pero no parece ser eso, porque si no le digo que busque las marcas, con el código normal funciona perfectamente.

Etiquetas: csv
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 09:25.