Añadir un dato según una lista de variables

Antes de nada, el título del hilo no sé cuán bien definirá mi pregunta, porque es algo bastante lioso como para resumir en el título, y no supe qué otra cosa poner [tomaaa]

Tengo el siguiente problemilla: tengo un listado de productos en un archivo CSV, exportado de una tienda online para importarlo en otra tienda online (estoy haciendo una migración de CMSs). El CSV tiene todos los datos principales de todos los productos que están en la tienda, salvo uno muy importante: la categoría. El problema es que son cientos/¿miles? de artículos, y poner la categoría manualmente es algo infierno XD aunque si no tengo alternativa lo haré.

Cada artículo tiene una ID numérica, y buceando en la base de datos SQL, me encontré con una relación de los artículos con las categorías, asociando sus IDs. Es decir, tengo filas de texto en las que pone todas las ID de todos los artículos de la tienda, con al lado la ID de la categoría a la que pertenece (aunque en artículos con varias categorías se repiten, esto es algo que tendré que ver cómo subsanar luego). Luego tengo otra lista que relaciona las ID de cada categoría con el nombre legible que tienen.

Pues bien, lo que quisiera hacer sería, que en el CSV, se añadiese a todos los productos una columna donde se especificase/n su/s categoría/s, según la relación de ID producto-ID categoría que tengo. ¿Alguien sabe cómo podría hacer esto de una forma automática?
y si importas directamente el archivo sql no te sería mas cómodo?
Noumaios escribió:y si importas directamente el archivo sql no te sería mas cómodo?


El problema es que los CMS no son iguales, uno es oscommerce y el nuevo es prestashop, dudo que sean compatibles sus bases de datos.
Carga los 3 CSV en un array cada uno, con un bucle dentro de un bucle dentro de un bucle, vas buscando donde coinciden los id, y cuando encuentres la coincidencia en el bucle interior, pues amplias el array de productos con el nombre de categoria, y cuando termines, pues grabas el nuevo array en formato CSV.

Estoy dando por hecho que tienes unos conocimientos de programacion para ello, o....?


Descripcion mas grafica:
Cargar de CSVs en arrays x3

for (){ <--- arrayProductos
    for(){ <--- arrayCategoriaProducto
        if (categoria[id_producto] == producto[id]){
             for(){<---- arrayNombreCategoria
                if (categoria[id]== nombreCat[id]){
                     arrayProductos[i][categoria] =  nombreCat[id]
                }
             }
        }
    }
}

Guarda el arrayProductos actualizado en formato CSV


Te pego un codigo en PHP que tenia por ahi para leer CSV a array
// **** Leer CSV y guardarlo en un array asosiativo
if ($gestor = fopen("prueba.csv", "r")) {
    if ($key = fgetcsv($gestor, 1000, ";")) { // En la primera linea estan los titulos de columna
        $indiceArray = 0;
        while ($filaCSV = fgetcsv($gestor, 1000, ";")) {
            foreach ($filaCSV as $indice => $valor){
                $arrayCSV[$indiceArray][$key[$indice]] = $valor;
            }
            $indiceArray++;
        }
    } else exit("Error al leer la primera linea del archivo CSV.");
    fclose($gestor);
} else exit("Error al leer el archivo CSV.");

Edit: Acabo de darme cuenta que quizas he dado demasiadas cosas por hecho... asi que tengo que preguntarte, ¿sabes que el CSV que has sacado de oscommerce, aunque le añadas el nombre de categoria, casi seguro que no puedes importarlo a prestashop mediante la opcion de importar CSV???
Un CSV es una estructurade datos generica, luego cada programa organiza los datos de una forma, por lo que el CSV que sale de oscommerce no esta organizado de la forma que utiliza prestashop o cualquier otro CMS, necesitas un proceso intermedio especifico para realizar la importacion de un CMS a otro CMS diferente, que entienda ambos CMS, como por ejemplo, seguramente lo que te enlace el compañero Noumaios mas abajo.
noentiendero escribió:Antes de nada, el título del hilo no sé cuán bien definirá mi pregunta, porque es algo bastante lioso como para resumir en el título, y no supe qué otra cosa poner [tomaaa]

Tengo el siguiente problemilla: tengo un listado de productos en un archivo CSV, exportado de una tienda online para importarlo en otra tienda online (estoy haciendo una migración de CMSs). El CSV tiene todos los datos principales de todos los productos que están en la tienda, salvo uno muy importante: la categoría. El problema es que son cientos/¿miles? de artículos, y poner la categoría manualmente es algo infierno XD aunque si no tengo alternativa lo haré.

Cada artículo tiene una ID numérica, y buceando en la base de datos SQL, me encontré con una relación de los artículos con las categorías, asociando sus IDs. Es decir, tengo filas de texto en las que pone todas las ID de todos los artículos de la tienda, con al lado la ID de la categoría a la que pertenece (aunque en artículos con varias categorías se repiten, esto es algo que tendré que ver cómo subsanar luego). Luego tengo otra lista que relaciona las ID de cada categoría con el nombre legible que tienen.

Pues bien, lo que quisiera hacer sería, que en el CSV, se añadiese a todos los productos una columna donde se especificase/n su/s categoría/s, según la relación de ID producto-ID categoría que tengo. ¿Alguien sabe cómo podría hacer esto de una forma automática?


es un csv, lo puedes abrir en excel entonces

en ese excel, hay algunas formulas/funciones que podrian ayudarte

imagina que tienes la columna ID producto, y quieres otra columna a la derecha con el ID categoria suyo
podrias usar la formula "BUSCARV" , que tiene varios parametros

basicamente tienes que buscar en otra hoja del excel donde tengas la relacion de producto y categoria.
la formula te permitira coger el valor de la categoria de un producto dado (la primera hoja), y rellenarse automaticamente

Acabo de verlo y es justo el script que utilicé para exportar el CSV de prestashop, pero no exporta el campo de la categoría. Estuve hoy mismo haciendo algunas pruebas a ver si conseguía que lo extrajese.

jazcks escribió:
noentiendero escribió:Antes de nada, el título del hilo no sé cuán bien definirá mi pregunta, porque es algo bastante lioso como para resumir en el título, y no supe qué otra cosa poner [tomaaa]

Tengo el siguiente problemilla: tengo un listado de productos en un archivo CSV, exportado de una tienda online para importarlo en otra tienda online (estoy haciendo una migración de CMSs). El CSV tiene todos los datos principales de todos los productos que están en la tienda, salvo uno muy importante: la categoría. El problema es que son cientos/¿miles? de artículos, y poner la categoría manualmente es algo infierno XD aunque si no tengo alternativa lo haré.

Cada artículo tiene una ID numérica, y buceando en la base de datos SQL, me encontré con una relación de los artículos con las categorías, asociando sus IDs. Es decir, tengo filas de texto en las que pone todas las ID de todos los artículos de la tienda, con al lado la ID de la categoría a la que pertenece (aunque en artículos con varias categorías se repiten, esto es algo que tendré que ver cómo subsanar luego). Luego tengo otra lista que relaciona las ID de cada categoría con el nombre legible que tienen.

Pues bien, lo que quisiera hacer sería, que en el CSV, se añadiese a todos los productos una columna donde se especificase/n su/s categoría/s, según la relación de ID producto-ID categoría que tengo. ¿Alguien sabe cómo podría hacer esto de una forma automática?


es un csv, lo puedes abrir en excel entonces

en ese excel, hay algunas formulas/funciones que podrian ayudarte

imagina que tienes la columna ID producto, y quieres otra columna a la derecha con el ID categoria suyo
podrias usar la formula "BUSCARV" , que tiene varios parametros

basicamente tienes que buscar en otra hoja del excel donde tengas la relacion de producto y categoria.
la formula te permitira coger el valor de la categoria de un producto dado (la primera hoja), y rellenarse automaticamente

Sí, lo estuve abriendo con el Calc de hecho, probaré esa fórmula a ver si me es util.


WaterDark escribió:
Carga los 3 CSV en un array cada uno, con un bucle dentro de un bucle dentro de un bucle, vas buscando donde coinciden los id, y cuando encuentres la coincidencia en el bucle interior, pues amplias el array de productos con el nombre de categoria, y cuando termines, pues grabas el nuevo array en formato CSV.

Estoy dando por hecho que tienes unos conocimientos de programacion para ello, o....?


Descripcion mas grafica:
Cargar de CSVs en arrays x3

for (){ <--- arrayProductos
    for(){ <--- arrayCategoriaProducto
        if (categoria[id_producto] == producto[id]){
             for(){<---- arrayNombreCategoria
                if (categoria[id]== nombreCat[id]){
                     arrayProductos[i][categoria] =  nombreCat[id]
                }
             }
        }
    }
}

Guarda el arrayProductos actualizado en formato CSV


Te pego un codigo en PHP que tenia por ahi para leer CSV a array
// **** Leer CSV y guardarlo en un array asosiativo
if ($gestor = fopen("prueba.csv", "r")) {
    if ($key = fgetcsv($gestor, 1000, ";")) { // En la primera linea estan los titulos de columna
        $indiceArray = 0;
        while ($filaCSV = fgetcsv($gestor, 1000, ";")) {
            foreach ($filaCSV as $indice => $valor){
                $arrayCSV[$indiceArray][$key[$indice]] = $valor;
            }
            $indiceArray++;
        }
    } else exit("Error al leer la primera linea del archivo CSV.");
    fclose($gestor);
} else exit("Error al leer el archivo CSV.");

Edit: Acabo de darme cuenta que quizas he dado demasiadas cosas por hecho... asi que tengo que preguntarte, ¿sabes que el CSV que has sacado de oscommerce, aunque le añadas el nombre de categoria, casi seguro que no puedes importarlo a prestashop mediante la opcion de importar CSV???
Un CSV es una estructurade datos generica, luego cada programa organiza los datos de una forma, por lo que el CSV que sale de oscommerce no esta organizado de la forma que utiliza prestashop o cualquier otro CMS, necesitas un proceso intermedio especifico para realizar la importacion de un CMS a otro CMS diferente, que entienda ambos CMS, como por ejemplo, seguramente lo que te enlace el compañero Noumaios mas abajo.


Gracias por los scripts. Lo del CSV no hay problema, hice pruebas y se importa perfectamente. La herramienta de importación de prestashop reconoce las columnas del CSV y le tienes que decir qué dato es, si es el nombre del artículo, la descripción, el precio, la ID... algunas cosas requieren retoques, pero por el momento ya encontré solución a todo ello, excepto el tema categorías.

De programación no controlo mucho [tomaaa] aunque puedo darle una intentona a los scripts. Aunque CSV no son 3, es uno sólo, luego tengo en formato texto esas relaciones de productoid-categoríaid y categoríaid-categoríanombre, aunque si hay que "convertirlos" con alguna sintaxis especial se podría hacer con un buscar y reemplazar creo.
6 respuestas